- /*
- 在指定目录下 将该目录中包括子目录所有的.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();
- }
- }
- }
复制代码 |
|