[物語を忘れました]°のブログへようこそ

IO相关Demo

这几天复习了IO相关知识

只为记录,好记性不如烂笔头

有误请指正

ありがとうございます。

我的公众号

作者:晨钟暮鼓c
个人微信公众号:程序猿的月光宝盒

1.判断存在,存在改名,并延迟删除,不存在新建

package pers.day19;

import java.io.File;

/**
 * 判断存在,存在改名,并延迟删除,不存在新建
 * @author Administrator
 *
 */
public class IODemon {
   public static void main(String[] args) throws Exception{
      test();
   }

   private static void test() throws Exception {
      File dir = new File("E:");
      File f1 = new File(dir,"jsc.txt");
      System.out.println(f1.exists());
      //不存在
      if(!f1.exists()){
         //新建
         f1.createNewFile();
      }else{
         //存在,把他改名为test.txt,其中new 是新建file对象
         f1.renameTo(new File(dir,"test.txt"));
         Thread.sleep(10000);
         new File(dir,"test.txt").delete();
      }
      
   }
}

2.文件夹递归

package pers.day19;

import java.io.File;
/**
 * 文件夹递归
 * @author Administrator
 *
 */
public class IODemon2 {
   public static void main(String[] args) {
      //新建文件对象
      File f = new File("E:/CAPH2018");
      //查找所有文件
      try {
         listAllFiles(f);
      } catch (Exception e) {
         System.out.println("null");
      }
   }

   private static void listAllFiles(File f) {
      //得到所有文件及目录
      File[] files = f.listFiles();
      for (File file : files) {
         //列出所有文件及目录
         System.out.println(file);
         //file如果是目录,进行递归
         if(file.isDirectory()){
            listAllFiles(file);
         }
      }
   }
}

3.列出分层结构

package pers.day19;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;

/**
 * 列出分层结构
 * @author Administrator
 *
 */
public class IODemon3 {
   public static void main(String[] args) {
      //效果:CAPH2018->LiveJT_01-AutoRun->Setup->AutoInst->LiveJT_01.exe
      String file = "E:/CAPH2018/LiveJT_01-AutoRun/Setup/AutoInst/LiveJT_01.exe";
      File f = new File(file);
      //把他放在List里
      ArrayList<String> parentNames = new ArrayList<>();
      //自定义的方法
      listAllParent(parentNames, f);
      
      System.out.println(parentNames);//答应得到的List
      Collections.reverse(parentNames);//颠倒顺序
      System.out.println(parentNames);//答应颠倒顺序后的List
      
      //新建一个字符串做拼接
      StringBuilder sb = new StringBuilder(40);
      //循环添加List中的内容拼接字符转
      for (String name : parentNames) {
         sb.append(name).append("->");
      }
      //删除最后的字符转
      sb.deleteCharAt(sb.length() - 1).deleteCharAt(sb.length() - 1);
      //最终打印
      System.out.println(sb);
   }

   private static void listAllParent(ArrayList<String> parentNames, File f) {
      //如果文件的上级目录的名字不等于空
      if (!"".equals(f.getParentFile().getName())) {
         //把这个名字加入parentNames的List中
         parentNames.add(f.getParentFile().getName());
      }

      //如文件的上上级目录不等于空(有上上级目录)
      if (f.getParentFile().getParentFile() != null) {
         //就调用自己,文件是改文件的上级文件
         listAllParent(parentNames, f.getParentFile());
      }
   }
}

4.批量修改文件名,截取掉所有视频文件:教育-Java学院-老师-

package pers.day19;

import java.io.File;

/**
 * 批量修改文件名,截取掉所有视频文件:教育-Java学院-老师-.
 * @author Administrator
 *
 */
public class IOdemon4 {
   public static void main(String[] args) {
      //路径
      File dir = new File("E:/123");
      //所有文件
      File[] allFiles = dir.listFiles();
      //需要删除的字段 
      String deletes = "教育-学院-老师-";
      //循环遍历
      for (File file : allFiles) {
         //打印获取到的文件
         System.out.println(file);
         //如果这个文件的名字包含需要删除的字段
         if(file.getName().contains(deletes)){
            //新的文件名,把需要删除的字段替换成空字符串
            String newFileName = file.getName().replace(deletes, "");
            //重命名文件
            file.renameTo(new File(dir,newFileName ));
         }
      }
      System.out.println("--------------------------------------------------");
      //重新获取文件放入之前的File数组
      allFiles = dir.listFiles();
      //遍历
      for (File file : allFiles) {
         System.out.println(file);
      }
   }
}

5.文件过滤器

package pers.day19;

import java.io.File;
import java.io.FilenameFilter;

/**
 * 文件过滤器
 * @author Administrator
 *
 */
public class IOdemon5 {
   public static void main(String[] args) {
      File dir = new File("E:/123");
      
      File[] files = dir.listFiles(new FilenameFilter() {
         //新建匿名内部类
         public boolean accept(File dir, String name) {
            //这个文件是文件,且name以“.avi结尾”,为true,存到files数组中
            return new File(dir,name).isFile() && name.endsWith(".avi");
         }
      });
      for (File file : files) {
         System.out.println(file);
      }
   }
}

6.文件字节输出

package pers.day19;

import java.io.File;
import java.io.FileInputStream;
import java.util.Arrays;

/**
 * 文件字节输出
 * @author Administrator
 *
 */
public class IODemon6 {
   public static void main(String[] args) throws Exception {
      //1.创建目标对象(表示把数据保存到那一个文件)
      File target = new File("file/test.txt");
      //2.创建文件字节输出流对象
      FileInputStream in = new FileInputStream(target);
      //3.具体的输出操作
      byte[] b = new byte[5];
      System.out.println(Arrays.toString(b));
      int len = -1;
      
      while((len = in.read(b)) != -1){
      String str = new String(b,0,len);
      System.out.println(str);
      }
      
      //4.关闭资源
      in.close();
   }
}

7.文件字节输入

package pers.day19;

import java.io.File;
import java.io.FileOutputStream;

/**
 * 文件字节输入
 * @author Administrator
 *
 */
public class IODemon7 {
   public static void main(String[] args) throws Exception {
      //1.创建目标对象(表示把数据保存到那一个文件)
      File target = new File("file/test.txt");
      //2.创建文件字节输出流对象
      FileOutputStream out = new FileOutputStream(target,false);
      //3.具体的输出操作
      out.write("I LOVE U".getBytes(),0,"I LOVE U".length());
      //4.关闭资源
      out.close();
   }
}

8.文件拷贝

package pers.day19;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 文件拷贝
 * @author Administrator
 *
 */
public class IODemon8 {
   public static void main(String[] args) throws Exception {
      //1.创建源
      File srcFile = new File("file/test.txt");
      File destFile = new File("file/test_copy.txt");
      //2.创建输入流对象
      FileInputStream in = new FileInputStream(srcFile);
      FileOutputStream out = new FileOutputStream(destFile);
      //3.读取操作
      byte[] buffer = new byte[1024];//创建1024字节的缓冲区(存贮已经读取的字节数据)
      int len = -1;//表示已经读取的字节数,如果-1表示文件读取到最后了
      while ((len = in.read(buffer)) != -1) {
         //打印读取的数据
         System.out.println(new String(buffer,0,len));
         //数据在buffer数组中
         out.write(buffer, 0, len);
      }
      //4.关闭输入流对象(资源)
      in.close();
      out.close();
   }
}

9.资源正确关闭

package pers.day19;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 文件拷贝关闭资源
 * @author Administrator
 *
 */
public class IODemon9 {
   public static void main(String[] args) throws Exception {
      //    test1();
      test2();
   }

   /**
    * java1.7以前的正常关闭资源
    */
   private static void test1() {
      //声明资源对象
      FileInputStream in = null;
      FileOutputStream out = null;
      try {
         //可能出现的异常代码
         //1.创建源
         File srcFile = new File("file/test.txt");
         File destFile = new File("file/test_copy.txt");
         //2.创建输入流对象
         in = new FileInputStream(srcFile);
         out = new FileOutputStream(destFile);
         //3.读取操作
         byte[] buffer = new byte[1024];//创建1024字节的缓冲区(存贮已经读取的字节数据)
         int len = -1;//表示已经读取的字节数,如果-1表示文件读取到最后了
         while ((len = in.read(buffer)) != -1) {
            //打印读取的数据
            System.out.println(new String(buffer, 0, len));
            //数据在buffer数组中
            out.write(buffer, 0, len);
         }
      } catch (Exception e) {
         e.printStackTrace();
      } finally {
         //4.关闭输入流对象(资源)
         try {
            if (in != null) {
               in.close();
            }
         } catch (Exception e2) {
            e2.printStackTrace();
         }
         try {
            if (out != null) {
               out.close();
            }
         } catch (Exception e3) {
            e3.printStackTrace();
         }
      }
   }

   /**
    * java1.7新特性 自动关闭资源
    */
   private static void test2() {
      //1.创建源
      File srcFile = new File("file/test.txt");
      File destFile = new File("file/test_copy.txt");
      try (
            //打开资源的代码
            //2.创建输入流对象
            FileInputStream in = new FileInputStream(srcFile);
            FileOutputStream out = new FileOutputStream(destFile);
         ) {
         //可能出现异常的代码
         //3.读取操作
         byte[] buffer = new byte[1024];//创建1024字节的缓冲区(存贮已经读取的字节数据)
         int len = -1;//表示已经读取的字节数,如果-1表示文件读取到最后了
         while ((len = in.read(buffer)) != -1) {
            //打印读取的数据
            System.out.println(new String(buffer, 0, len));
            //数据在buffer数组中
            out.write(buffer, 0, len);
         }
      } catch (Exception e) {
         // TODO: handle exception
      }
   }
}

posted @ 2019-05-29 22:30  故事我忘了°  阅读(211)  评论(0)    收藏  举报