package cn.itheima.doagain;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
* 需求:把一个文件夹下的文件复制到另外一个文件夹,并改名。(注:此文件下的.java文件不是终极目录)
* 数据源:"C:\\java\\itheima\\0801"
* 目的地:"c:\\java\\java\\copys"
* 思路: 1.一看到复制文件夹的.java类型的文件,首先考虑的文件过滤器和递归,进一步分析,本题用递归来解。
* 2.判断目的地的文件夹是否存在,不存在就创建文件夹。
* 3.判断是否是文件--是--判断是否是后缀.java的文件--用高字符流输入和输出
* 不是--回到步骤2
* 4.给文件夹改名
*/
public class CopysFiles {
public static void main(String[] args) throws IOException {
// 封装数据源:有关文件的题,首先想到的就该是这个
File scr = new File("C:\\java\\itheima\\0801");
copys(scr);
}
public static void copys(File scr) throws IOException {
// 封装目的地
File dest = new File("c:\\java\\java\\copys");
// 判断目的地中的文件是否存在,不存在则建立文件目录
if (!dest.exists()) {
dest.mkdirs();
}
// 获取文件下的所有文件和文件夹
File[] files = scr.listFiles();
// 遍历文件夹数组
for (File f : files) {
// 凡是对象都要先判断对象是否为空
if (f != null)
// 判断是不是文件
if (f.isFile()) {
// 判断是不是以.java结尾
if (f.getName().endsWith(".mp4")) {
File newdest = new File(dest, f.getName());
// 输入和输出
BufferedReader br = new BufferedReader(
new FileReader(f));
BufferedWriter bw = new BufferedWriter(new FileWriter(
newdest));
String line = null;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
}
// 递归
} else {
copys(f);
}
}
//获取并遍历已经被复制过去的文件
File[] files2 = dest.listFiles();
for (File f : files2) {
//获取改名字后的文件名
String newName = f.getName().replace(".java", ".txt");
//封装新的文件
File file3 = new File(dest, newName);
//改名
f.renameTo(file3);
}
}
}
我之前的一个帖子,是.java文件的,有注释。多了改名的功能,你删掉就行了。 |