黑马程序员技术交流社区

标题: File类复制文件到指定文件夹这段程序中的问题 [打印本页]

作者: Sakuratossi    时间: 2014-8-29 16:23
标题: File类复制文件到指定文件夹这段程序中的问题
  1. /*
  2. 在指定目录下 将该目录中包括子目录所有的.bmp文件复制到 bmpFile这一个目录下。

  3. 我的程序拷贝的功能实现了,但是问题是 如果子目录下有相同文件名的图片时,复制到bmpFile目录后希望将名字改成 原文件名_1,这个怎么也没出来,

  4. 不知哪位高手能指点一下,程序中哪儿出了问题。。。
  5. */

  6. import java.io.*;
  7. import java.util.*;

  8. class CopyJavaFile
  9. {
  10.         public static void main(String[] args) throws IOException
  11.         {
  12.                 String srcDirName = "/Users/liumin/Desktop/test/D8";
  13.                 String desDirName = "/Users/liumin/Desktop/test/bmpFile";
  14.                 File srcDir = new File(srcDirName);

  15.                 FilenameFilter fnf = new FilenameFilter(){
  16.                         public boolean accept(File dir, String name)
  17.                         {
  18.                                 return name.endsWith(".bmp");
  19.                         }
  20.                 };

  21.                 List<File> list = new ArrayList<File>();

  22.                 findJavaFile(srcDir,fnf,list);

  23.                 copyFile(list,desDirName);

  24.         }

  25.         //找到指定目录下的.找java 文件 并存到List集合中
  26.         public static void findJavaFile(File srcDir,FilenameFilter filter,List<File> list)
  27.         {       
  28.                 File[] files = srcDir.listFiles();  // 将目录下的文件列出来
  29.                
  30. /*                for(int i =0; i < files.length; i++)
  31.                 {
  32.                         if(files[i].isDirectory())  //是目录
  33.                                 findJavaFile(files[i],filter,list);   //是目录,再重复进入目录直到不是目录为止。       
  34.                         else
  35.                         {                //如果该目录下的 这个文件含有指定的.java后缀名则添加到列表
  36.                                 if(filter.accept(srcDir, files[i].getName()))
  37.                                         list.add(files[i]);
  38.                         }                               
  39.                 }                       
  40. */
  41.                 for(File file : files)
  42.                 {
  43.                         if(file.isDirectory())
  44.                                 findJavaFile(file,filter,list);
  45.                         else
  46.                         {
  47.                                 if(filter.accept(srcDir,file.getName()))
  48.                                         list.add(file);
  49.                         }                               
  50.                 }
  51.         }

  52.         public static void copyFile(List<File> list,String desDirName) throws IOException
  53.         {       
  54.                 // 将文件写入到指定目录下

  55.                 BufferedWriter bw = null;
  56.                 BufferedReader br = null;
  57.                 String desFileName = null;
  58.                 File desFile = null;
  59.                 //遍历list集合的文件 并复制
  60.                 for(int i = 0 ; i < list.size(); i++)
  61.                 {
  62.                         desFileName = list.get(i).getName();

  63.                         File desDir = new File(desFileName);
  64.                         if (desDir.exists()) {
  65.                                 String[] names = desDir.list();
  66.                                 // 把目录下的文件名 转成集合 判断 要拷贝的文件 的名字是否已经存在了
  67.                                 List<String> namesList = Arrays.asList(names);  
  68.                                 //如果存在,在文件名后面+_1
  69.                                 if(namesList.contains(desFileName))
  70.                                 {
  71.                                         desFileName = desFileName + "_1";
  72.                                 }
  73.                         }
  74.                         desFile = new File(desDirName,desFileName);  // 在指定目录desDirName下 建立文件

  75.                         bw = new BufferedWriter(new FileWriter(desFile));  // 如果desFile不用creatNewFile(),在这一行会自动在内存新建此文件吗?
  76.                         br = new BufferedReader(new FileReader(list.get(i)));


  77.                         String line = null;
  78.                         while((line = br.readLine())!=null)
  79.                         {
  80.                                 bw.write(line);
  81.                                 bw.newLine();
  82.                                 bw.flush();
  83.                         }
  84.                        

  85.                         bw.close();
  86.                 }
  87.         }
  88. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2