黑马程序员技术交流社区

标题: 这个代码有什么问题吗 [打印本页]

作者: saury    时间: 2016-1-4 21:31
标题: 这个代码有什么问题吗
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);
                        }
                }
        }
}



作者: qinrongchang    时间: 2016-1-4 22:07
谢谢分享
作者: saury    时间: 2016-1-4 22:18
qinrongchang 发表于 2016-1-4 22:07
谢谢分享

黑马币不好赚啊




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