使用IO流复制文件夹(包括子目录)
Posted cs2024
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用IO流复制文件夹(包括子目录)相关的知识,希望对你有一定的参考价值。
IO流用于处理设备上的数据(包括硬盘,内存,键盘录入)。
IO流可根据流向不同分为输入流和输出流,根据处理数据类型不同分为字节流和字符流。
字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。
字节流和字符流的区别:
a.读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
b.处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。
使用IO流复制文件夹(包括子目录)思路和步骤: 对于文件夹的复制,分2种情况
(1)当我们对文件进行遍历的时候,如果目标文件夹下的文件是个标准文件的话,我们就可以直接去做复制的动作,
(2)当目标文件中,是带有文件夹的文件,那么这个时候就需要对文件夹进行递归,直到最后它是个标准文件后,我们在做复制动作
代码演示:
1 package liu; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 9 public class CopyDirectory { 10 /** 11 * 复制文件的方法 12 * @param src:源文件 13 * @param dest:目标文件 14 */ 15 public static void copyFile(File src,File dest) { 16 try { 17 //实例化文件输入流和文件输出流对象 18 FileInputStream fis = new FileInputStream(src); 19 FileOutputStream fos = new FileOutputStream(dest); 20 //定义接收源文件数组 21 byte[] buf = new byte[(int) src.length()]; 22 //从源数据中读取数据 23 fis.read(buf); 24 //把数据写入到目标文件中 25 fos.write(buf); 26 //关闭流 27 fos.close(); 28 fis.close(); 29 } catch (FileNotFoundException e) { 30 // TODO Auto-generated catch block 31 e.printStackTrace(); 32 } catch (IOException e) { 33 // TODO Auto-generated catch block 34 e.printStackTrace(); 35 } 36 } 37 /** 38 * 复制目录的方法 39 * @param src 40 * @param dest 41 */ 42 public static void copyDir(File src,File dest) { 43 dest.mkdir(); 44 File[] files = src.listFiles(); 45 for (File file : files) { 46 if(file.isFile()) { 47 copyFile(file, new File(dest.getAbsolutePath()+File.separator+file.getName())); 48 } 49 if(file.isDirectory()) { 50 copyDir(file, new File(dest.getAbsolutePath()+File.separator+file.getName())); 51 } 52 } 53 } 54 public static void main(String[] args) { 55 //创建文件对象和指定的文件相关联 56 File src = new File("D:\\HBuilder_7.5"); 57 File dest = new File("E:\\"+src.getName()); 58 //创建目录 59 dest.mkdir(); 60 //找到源目录下所有文件 61 File[] fs = src.listFiles(); 62 //遍历 63 for (File f : fs) { 64 //如果是文件调用复制文件的方法 65 if(f.isFile()) { 66 copyFile(f, new File(dest.getAbsolutePath()+File.separator+f.getName())); 67 } 68 //如果是目录调用复制目录的方法 69 if(f.isDirectory()) { 70 copyDir(f, new File(dest.getAbsolutePath()+File.separator+f.getName())); 71 } 72 } 73 } 74 }
以上是关于使用IO流复制文件夹(包括子目录)的主要内容,如果未能解决你的问题,请参考以下文章
java基础IO流 复制键盘录入的目录,复制其中的.java文件到指定目录,指定目录中有重名,则改名 对加密文件计算字母个数