我的思路是先判断是什么文件,如果是纯文本的话就用字符流,然后listFile方法获取文件名,判断是文件还是文件夹,这里就需要递归了,如果是文件夹,就调用本方法继续,然后在定义一个复制文件的方法,判断的如果是文件,就直接复制,这里有一段代码,可以参考一下,其实我也不是很会
package com.itheima_Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 需求:编写一个程序,我想把这个目录下的所有带.java文件拷贝到另一个目录下,
* 拷贝成功以后把后缀名是.java改成.txt
*
*/
import java.io.*;
public class CopyFile {
public static void main(String[] args) {
File orig=new File("D:\\code"); //源文件夹
File dest=new File("D:\\newCode");//要复制过去的文件夹
findAndCopyJava(orig,dest);
}
public static void copy(File orig,File dest){ //用于改后缀后复制
BufferedReader buf = null;
PrintWriter out=null;;
try{
buf=new BufferedReader(new InputStreamReader(new FileInputStream(orig))); //读取流,提示阅读效率
out=new PrintWriter(dest+"\\"+orig.getName().replace(".java", ".txt")); // 把后缀改成.java,用Print流提升效率
}catch(IOException e){
System.out.println("文件orig或者dest异常");
}
String line=null;
try{
while((line=buf.readLine())!=null){
out.println(line);
}
}catch(IOException e){
}
finally{
try{
if(buf!=null)
buf.close();
if(out!=null)
out.close();
}catch(Exception e2){
}
}
}
public static void findAndCopyJava(File orig,File dest){ //
if(!dest.exists()){ //不存在就创建目的目录,但是这个地址有可能是一个绝对地址。
dest.mkdir();
}
if(!dest.isDirectory()){ //所以再次判断存在的文件是否是一个目录,而不是文件。
dest.mkdir();
}
File[] files=orig.listFiles();
for(File file: files){ //遍历files
if(file.isDirectory()){
findAndCopyJava(file,dest); //递归,一直到file是一个文件而不是目录。
}
else if(file.getName().endsWith(".java")){
copy(file,dest);
}
}
}
} |