­

第6次文章:利用IO流,对文件和文件夹进行拷贝操作

  • 2019 年 10 月 8 日
  • 筆記

最近两周在家,学习效率大打折扣,所以这两周的学习总结不是那么丰富,有点简单,希望各位小伙伴儿多多包涵啊

下周就回学校了,一切都会恢复过来的,大家一起加油哦
利用上周学习到的IO流的读取和写出操作,进一步可以将读取和写出进行联合使用,实现对文件以及文件夹的拷贝操作。

对文件的复制操作主要分四步进行:

1、与源文件进行关联

2、选择读取和写出字节流

3、选择相应的读取字节长度,并且将读取出来的字节数组写出到指定的目标文件中

4、依次关闭写出资源,以及读取资源

对文件进行复制拷贝,下面是相应的源码:

public static void fileCopy(String srcPath,String destPath) {          //1、与源文件和目标文件建立联系(确保源文件存在)目标文件可以不存在          fileCopy(new File(srcPath),new File(destPath));      }    public static void fileCopy(File src,File dest) {          //2、选择相应的流          InputStream is = null;//创建输入流,提升作用域          OutputStream os = null;//创建输出流,提升作用域          try {              is = new FileInputStream(src);            } catch (FileNotFoundException e) {              e.printStackTrace();              System.out.println("源文件不存在");          }          try {              os = new FileOutputStream(dest,true);//以追加的方式写出          }catch (FileNotFoundException e ) {              e.printStackTrace();              System.out.println("目标文件关联失败");          }          //3、操作          byte[] flush = new byte[1024];//定义每次读取和写入的大小          int len = 0 ;//定义每次读取的实际大小          try {              while(-1!=(len=is.read(flush))) {                  os.write(flush, 0, len);              }              os.flush();          } catch (IOException e) {              e.printStackTrace();              System.out.println("文件读取失败");          }finally {              //4、关闭资源:先关闭最后打开的资源              try {                  os.flush();              } catch (IOException e) {                  e.printStackTrace();                  System.out.println("关闭目标文件资源失败");              }              try {                  is.close();              } catch (IOException e) {                  e.printStackTrace();                  System.out.println("关闭源文件资源失败");              }          }      }

在对文件的复制操作中,与上一周的内容(单独进行写出操作)相比,由于在读取的时候已经是使用了字节数组进行读取,所以在写出的时候不需要对字节流进行强制转化,可以直接将字节数组写出到目标文件中。

对文件夹进行拷贝的基本步骤:

1、在拷贝文件夹的时候,首先需要对源文件夹进行类型判断,是文件还是文件夹

2、在源文件目录是文件的时候,可以直接调用上述封装的fileCopy方法进行文件的复制。

3、若源文件是文件夹的时候,应该利用递归的方式,检查子孙级文件,然后将文件夹中的子孙级文件写出到目标文件夹中。

文件夹拷贝的源码:

public static void copyDir(String srcPath,String destPath) {          File srcDir = new File(srcPath);          File destDir = new File(destPath,srcDir.getName());          copyDirDetails(srcDir,destDir);      }    public static void copyDirDetails(File srcDir,File destDir) {          if (srcDir.isFile()) {//src是文件              FileUtil.fileCopy(srcDir, destDir);          }else if (srcDir.isDirectory()) {//src是文件夹              //确保目标文件夹的路径存在              destDir.mkdirs();              //获取下一级文件              for (File sub:srcDir.listFiles()) {                  copyDirDetails(sub,new File(destDir,sub.getName()));              }          }      }

在进行文件夹拷贝时,如果判断出源文件为文件夹类型,那么首先应该确保目标文件夹存在,所以我们需要先建立目标文件夹的路径,此处调用的是mkdirs方法,此方法可以直接建立文件的路径,而不需要逐级建立相关的文件夹,比mkdir方法更加方便快捷。所以此处选择mkdirs方法进行建立相应的文件夹路径。