package com.itheima_01; 
 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.Scanner; 
 
/* 
 *复制文件夹下所有指定后缀(.java)的文件到另外的目录去,并将这些文件改名为.txt后缀 
 * */ 
public class CopyFileDemo { 
        public static void main(String[] args) throws IOException { 
                // 调用方法 
                File dir1 = getDir(); 
                File dir2 = getDir(); 
                if (dir1.equals(dir2)) { 
                        System.out.println("目标文件夹是源文件夹的子文件夹"); 
                } else { 
                        copyFile(dir1, dir2); 
                } 
 
        } 
 
        /* 
         * 两个明确 返回值类型 File 参数列表 无 
         */ 
        public static File getDir() { 
                // 创建键盘录入对象 
                Scanner sc = new Scanner(System.in); 
                // 因为不断录入并判断 定义无限循环 
                while (true) { 
                        // 接收文件路径 
                        System.out.println("请输入文件夹路径"); 
                        String line = sc.nextLine(); 
                        // 封装路径 
                        File dir = new File(line); 
                        // 判断是否是文件夹路径 
                        if (!(dir.exists())) { 
                                System.out.println("请输入正确的文件夹路径"); 
                                // 是文件路径 
                        } else if (dir.isFile()) { 
                                System.out.println("请输入正确的文件夹路径"); 
                                // 是文件夹路径 
                        } else { 
                                return dir; 
                        } 
                } 
        } 
 
        /* 
         * 两个明确 返回值类型 void 参数列表 File dir1 File Dir2 
         */ 
        public static void copyFile(File src, File dest) throws IOException { 
                // 在目的地创建与原文件夹一样名字的文件夹 
                File newFile = new File(dest, src.getName()); 
                newFile.mkdir(); 
                // 封装源文件夹路径得到所有文件夹和文件的名称的数组 
                File[] fileArray = src.listFiles(); 
                // 遍历数组 
                for (File subFile : fileArray) { 
                        // 判断是文件还是文件夹 
                        // 是文件并判断文件的名字是否以.java结尾 
                        if (subFile.isFile()) { 
                                if (subFile.getName().endsWith(".java")) { 
                                        // 封装数据源 
                                        BufferedReader br = new BufferedReader(new FileReader(subFile)); 
                                        // 封装目的地 
                                        BufferedWriter bw = new BufferedWriter( 
                                                        new FileWriter(new File(newFile, subFile.getName().replace(".java", ".txt")))); 
                                        // 一次读取一个字符数组 
                                        char[] chs = new char[8192]; 
                                        // 定义读取的长度 
                                        int len = 0; 
                                        while ((len = br.read(chs)) != -1) { 
                                                // 一次写一个字符数组的一部分 
                                                bw.write(chs, 0, len); 
                                        } 
                                        // 释放资源 
                                        br.close(); 
                                        bw.close(); 
                                } 
                        } else { 
                                // 是文件夹递归循环 
                                copyFile(subFile, newFile); 
                        } 
                } 
        } 
} 
 
 
 |