黑马程序员技术交流社区
标题:
File类复制文件到指定文件夹这段程序中的问题
[打印本页]
作者:
Sakuratossi
时间:
2014-8-29 16:23
标题:
File类复制文件到指定文件夹这段程序中的问题
/*
在指定目录下 将该目录中包括子目录所有的.bmp文件复制到 bmpFile这一个目录下。
我的程序拷贝的功能实现了,但是问题是 如果子目录下有相同文件名的图片时,复制到bmpFile目录后希望将名字改成 原文件名_1,这个怎么也没出来,
不知哪位高手能指点一下,程序中哪儿出了问题。。。
*/
import java.io.*;
import java.util.*;
class CopyJavaFile
{
public static void main(String[] args) throws IOException
{
String srcDirName = "/Users/liumin/Desktop/test/D8";
String desDirName = "/Users/liumin/Desktop/test/bmpFile";
File srcDir = new File(srcDirName);
FilenameFilter fnf = new FilenameFilter(){
public boolean accept(File dir, String name)
{
return name.endsWith(".bmp");
}
};
List<File> list = new ArrayList<File>();
findJavaFile(srcDir,fnf,list);
copyFile(list,desDirName);
}
//找到指定目录下的.找java 文件 并存到List集合中
public static void findJavaFile(File srcDir,FilenameFilter filter,List<File> list)
{
File[] files = srcDir.listFiles(); // 将目录下的文件列出来
/* for(int i =0; i < files.length; i++)
{
if(files[i].isDirectory()) //是目录
findJavaFile(files[i],filter,list); //是目录,再重复进入目录直到不是目录为止。
else
{ //如果该目录下的 这个文件含有指定的.java后缀名则添加到列表
if(filter.accept(srcDir, files[i].getName()))
list.add(files[i]);
}
}
*/
for(File file : files)
{
if(file.isDirectory())
findJavaFile(file,filter,list);
else
{
if(filter.accept(srcDir,file.getName()))
list.add(file);
}
}
}
public static void copyFile(List<File> list,String desDirName) throws IOException
{
// 将文件写入到指定目录下
BufferedWriter bw = null;
BufferedReader br = null;
String desFileName = null;
File desFile = null;
//遍历list集合的文件 并复制
for(int i = 0 ; i < list.size(); i++)
{
desFileName = list.get(i).getName();
File desDir = new File(desFileName);
if (desDir.exists()) {
String[] names = desDir.list();
// 把目录下的文件名 转成集合 判断 要拷贝的文件 的名字是否已经存在了
List<String> namesList = Arrays.asList(names);
//如果存在,在文件名后面+_1
if(namesList.contains(desFileName))
{
desFileName = desFileName + "_1";
}
}
desFile = new File(desDirName,desFileName); // 在指定目录desDirName下 建立文件
bw = new BufferedWriter(new FileWriter(desFile)); // 如果desFile不用creatNewFile(),在这一行会自动在内存新建此文件吗?
br = new BufferedReader(new FileReader(list.get(i)));
String line = null;
while((line = br.readLine())!=null)
{
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2