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