IO流的练习3 —— 复制多级文件夹下的指定文件并改名
需求:复制指定目录下的指定文件,并修改后缀名。
指定的文件是:.java文件。
指定的后缀名是:.jad
数据源所在文件夹:C:\Users\Administrator\Desktop\记录
目的地所在文件夹:C:\Users\Administrator\Desktop\新建文件夹\copy
分析:
A:封装数据源的目录 B:封装目的地的目录
判断路径下的文件是否是文件夹
是:在目的文件夹下创建该文件,
获取数据源所在文件夹的所有文件的File数组
遍历File数组,得到每个文件的File对象
不是:再对其后缀进行判断是否是.java
是:进行改名并复制
不是:无视
代码:
1、首先写main方法:
1 public static void main(String[] args) throws IOException { 2 //封装目录 3 File start = new File("C:\\Users\\Administrator\\Desktop\\记录"); 4 File end = new File("C:\\Users\\Administrator\\Desktop\\新建文件夹\\copy"); 5 6 //如果目的地文件夹不存在,则创建 7 if(!end.exists()){ 8 end.mkdir(); 9 } 10 11 //复制文件夹 12 copyFolder(start,end); 13 }
2、判断是否是文件夹,并对文件夹进行复制的方法
1 private static void copyFolder(File start, File end) throws IOException { 2 // 由于start是文件夹,所以开始不必获取File数组,直接进行判断 3 if(start.isDirectory()){ 4 //是文件夹 5 6 //首先在目的文件夹下创建不同路径,同样名称的文件夹 7 File newFolder = new File(end,start.getName()); 8 newFolder.mkdir(); 9 10 //获取该文件夹下的所有文件或文件夹的File数组 11 File[] f = start.listFiles(); 12 for(File file : f){ 13 //再重新执行判断是否是文件夹 14 copyFolder(file,newFolder); 15 } 16 17 }else{ 18 //是文件 19 //判断是否是.java后缀的,是的话就改名,不是则丢掉 20 String name = start.getName(); 21 if(name.endsWith(".java")){ 22 String newname = name.replace(".java", ".jad"); 23 File newfile = new File(end,newname); 24 25 //进行复制 26 copyfile(start,newfile); 27 }
3、判断文件后缀是否是.java,并对它的数据进行复制
1 private static void copyfile(File start, File newfile) throws IOException { 2 //因为任意格式的,所以用缓冲字节流 3 BufferedInputStream bi = new BufferedInputStream(new FileInputStream(start)); 4 BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(newfile)); 5 6 //获取数据 7 byte[] by = new byte[1024]; 8 int len = 0; 9 while((len = bi.read(by)) != -1){ 10 bo.write(by,0,len); 11 } 12 bi.close(); 13 bo.close(); 14 }
何事都只需坚持..
难?
维熟尔。
LZL的自学历程...只需坚持