A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© saury 中级黑马   /  2016-1-4 21:31  /  800 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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);
                        }
                }
        }
}


评分

参与人数 1黑马币 +14 收起 理由
吉吉粥 + 14 很给力!

查看全部评分

2 个回复

倒序浏览
谢谢分享
回复 使用道具 举报

黑马币不好赚啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马