第6次文章:利用IO流,对文件和文件夹进行拷贝操作
- 2019 年 10 月 8 日
- 筆記
最近两周在家,学习效率大打折扣,所以这两周的学习总结不是那么丰富,有点简单,希望各位小伙伴儿多多包涵啊
对文件的复制操作主要分四步进行:
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方法进行建立相应的文件夹路径。