黑马程序员技术交流社区

标题: IO流综合练习01 [打印本页]

作者: _J2EE_LiXiZhen    时间: 2017-11-19 22:53
标题: IO流综合练习01
从控制台获取输入的文件目录然后将该目录(包含子目录)下的.java文件复制到D:/java文件夹中,并统计java文件的个数.
提示:如果有相同的名称的文件,如果两个Test01.java,则拷贝到目标文件夹时只能有一个Test01.java,
另一个Test01.java要修改为另一个名称:该名称可随机生成,只要不重复即可

[Java] 纯文本查看 复制代码
public class Test03 {
        public static void main(String[] args) throws IOException {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入要复制的文件夹路径:");
                String path = sc.nextLine();
                // 创建源文件对象
                File srcDir = new File(path);
                // 创建目标文件对象
                File destDir = new File("C:\\Users\\Administrator\\Desktop\\practice2");

                // 拷贝文件夹
                copyDir(srcDir, destDir);
        }

        // 复制方法
        public static void copyDir(File srcDir, File destDir) throws IOException {
                // 判断源文件是否存在,不存在直接退出
                if (!srcDir.exists()) {
                        System.out.println("源文件不存在!");
                        return;
                }
                // 判断是否是文件夹
                if (srcDir.isDirectory()) {
                        File[] fileList = srcDir.listFiles();
                        for (File f : fileList) {
                                copyDir(f, destDir);
                        }
                } else {
                        // 如果不是文件夹即是文件,文件直接拷贝
                        // 创建字节输入流对象
                        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcDir));
                        // 创建要复制的文件
                        File destFile = new File(destDir, srcDir.getName());

                        // 判断当前目录下是否有重名文件
                        if (destFile.exists()) {
                                // 如果存在就改名
                                Random r = new Random();
                                String[] arr = srcDir.getName().split("\\.");
                                StringBuilder builder = new StringBuilder();
                                //采用三位随机数字拼接的方式防止重名
                                builder.append(arr[0]).append(r.nextInt(10)).append(r.nextInt(10)).append(r.nextInt(10)).append(".").append(arr[1]);
                                String child = builder.toString();
                                destFile = new File(destDir, child);
                        }

                        // 创建字节输出流对象
                        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

                        byte[] b = new byte[1024 * 8];
                        int len;
                        // 写入目标文件夹
                        while ((len = bis.read(b)) != -1) {
                                bos.write(b, 0, len);
                                bos.flush();
                        }
                        bos.close();
                        bis.close();
                }
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2