本帖最后由 碎流 于 2015-1-14 16:33 编辑
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
public class Demo10 {
public static void main(String[] args) throws IOException {
File src = new File("c:\\aaa");
File dest=new File("e:\\aaa");
copyDir(src,dest);
}
public static void copyDir(File src,File dest) throws IOException
{
if(!dest.exists()) //新目录存在吗? ..
{
System.out.println("目录不存在,新建?");
dest.mkdirs();
}
if(src.exists() && src.isDirectory()) //旧目录是存在吗?是文件夹吗? 这个和上面属于同一个平面的.
{
File[] files=src.listFiles();
for(File file:files) //遍历出来的又是两种情况.一个是文件一个是文件夹.
{
if(file.isDirectory()) //如果是文件夹,递归.
{
copyDir(file, new File(dest.getPath()+"\\"+file.getName()));
}
else
{
//修改后缀在这里最好,因为这个接受的本来就是一个字符串,可以通过操作字符串很好解决.
copyFile(file,new File(dest.getPath()+"\\"+file.getName()));
}
}
}
changeName(dest);
}
private static void copyFile(File src, File dest) throws IOException{
BufferedReader bfr = new BufferedReader(new FileReader(src));
BufferedWriter bfw = new BufferedWriter(new FileWriter(dest));
String str = null;
while((str=bfr.readLine())!=null)
{
bfw.write(str);
}
bfr.close();
bfw.flush();
bfw.close();
}
/*
* 后面没有修改了,自己想怎么解决.因为设置的名字是一个字符串,那么在命名的时候我们可以利用命名的字符串.
* 但是,你这样遍历出来的是一个一个文件,要文件名转成字符串才可以.所以,建议在以上进行迭代的过程中,就修改
* 名称.因为同样都是字符串.
*
* 按照你的思路,这样命名的话,最起码应该重新将文件夹进行遍历递归才可以.
* */
private static void changeName(File dest) {
File[] listFiles = dest.listFiles(); //这个逻辑是错误的,因为复制的是一个文件夹,并且有层次的
for(File listFile:listFiles)
{
listFile.getAbsolutePath().replace(".java", ".txt"); //这种修改名方法也是不可以的.只能修改后缀.
}
}
} |