黑马程序员技术交流社区

标题: 一次复制多个文件该怎么搞啊?有没有人指导哈子 [打印本页]

作者: crazy_primitive    时间: 2013-7-11 15:56
标题: 一次复制多个文件该怎么搞啊?有没有人指导哈子
本帖最后由 crazy_primitive 于 2013-7-14 10:09 编辑
  1. import java.io.*;
  2. /*
  3. 9、 编写一个程序,将d:\java 目录下的所有.java 文件复制
  4. 到d:\jad 目录下,并将原来文件的扩展名从.java 改为.jad。
  5. */
  6. class Test9{
  7. public static void main(String[] args) {
  8. copy();
  9. }
  10. public static void copy(){
  11. BufferedReader bufr=null;
  12. BufferedWriter bufw=null;
  13. try{
  14. bufw=new BufferedWriter(new FileWriter("d:\\java\\Demo.jad"));//这里我只知道一次复制一个文件,如果复制多个怎么搞?是不是用for循环?
  15. bufr=new BufferedReader(new FileReader("d:\\java\\Demo2.java"));
  16. String line=null;
  17. while((line=bufr.readLine())!=null){
  18. bufw.write(line);
  19. bufw.newLine();
  20. bufw.flush();
  21. }
  22. }
  23. catch (IOException e){
  24. System.out.print("读写失败");
  25. }
  26. finally{
  27. try{
  28. if(bufw!=null)
  29. bufw.close();
  30. }
  31. catch (IOException e){
  32. System.out.print("关闭写操作失败");
  33. }
  34. try{
  35. if(bufr!=null)
  36. bufr.close();
  37. }
  38. catch (IOException e){
  39. System.out.print("关闭读操作失败");
  40. }
  41. }
  42. }
  43. }
复制代码

作者: 王靖远    时间: 2013-7-11 16:25
遍历d:\java 目录下的文件,获取文件名判断文件是否是.java文件,满足的话写入d:\jad文件夹
作者: crazy_primitive    时间: 2013-7-11 16:30
这个我知道,就是不知道从哪里下手,该怎么操作
作者: 张歆明    时间: 2013-7-11 16:36
crazy_primitive 发表于 2013-7-11 16:30
这个我知道,就是不知道从哪里下手,该怎么操作

这是我以前做过的一道题目  里面涉及了你的要求   我现在把他复制给你 你看下 能帮到你么
  1. package test2;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.io.InputStreamReader;
  9. import java.util.ArrayList;
  10. import java.util.List;

  11. /*
  12. 在一个文件夹内有文件夹和文件,文件名的格式为:数字+名称.java。
  13. 要求:把所有的.java文件复制一份,变为文件名格式为:数字+名称+数字.java。
  14. (其中数字是相对应的,名称由字母组成。如:01Demo.java——>01Demo01.java)
  15. */

  16. /*
  17. * 思路:
  18. * (1). 通过递归获取指定目录下的java源文件列表  并且使用正则表达式进行过滤  降符合要求的文件添加到文件列表里面
  19. * (2). 对获取到的合格的文件列表复制到指定文件加下面
  20. * */
  21. public class Test3{
  22.         public static void main(String[] args) {
  23.                 File sourceFileDir =new File("D:\\testfolder"); //源文件文件夹对象
  24.                 File destinationFileDir =new File("D:\\testFileCopies"); //目标文件夹对象
  25.                 //1.构建过滤文件名的正则表达式
  26.                         //标准文件名要求:数字+名称.java  e.g. 01Demo.java
  27.                 String fileNameRegex ="((0\\d+)Demo)(\\.java)";
  28.                 List<File> filteredJavaFileList =new ArrayList<File>();
  29.                
  30.                 //2.按照标准生成符合条件的源文件对象列表和目标文件对象列表  ---递归方式生成
  31.                 getQualifiedFilesList(sourceFileDir, filteredJavaFileList, fileNameRegex);
  32.                
  33.                 //3.把源文件列表中的文件复制到目标地址中
  34.                 copyFileList(filteredJavaFileList, destinationFileDir, fileNameRegex);
  35.         }
  36.        
  37.         //把源文件列表中的文件复制到目标地址中
  38.         private static void copyFileList(List<File> filteredJavaFileList,
  39.                         File destinationFileDir, String fileNameRegex) {
  40.                 for(File sourceJavaFile: filteredJavaFileList){
  41.                         //根据正则标准产生按照标准的文件夹名
  42.                         String newFileName = sourceJavaFile.getName().replaceAll(fileNameRegex, "$1$2$3");
  43.                         File destiJavaFile =new File(destinationFileDir, newFileName);
  44.                         System.out.println("原文件名:"+sourceJavaFile.toString()+"-----新文件名:"+ destiJavaFile);
  45.                         //复制单个文件
  46.                         copyFile(sourceJavaFile, destiJavaFile);
  47.                 }
  48.         }
  49.        
  50.         //复制单个文件
  51.         private static void copyFile(File sourceJavaFile, File destiJavaFile) {
  52.                 BufferedReader bufr =null;
  53.                 BufferedWriter bufw =null;
  54.                
  55.                 try{
  56.                         //源(InputStream/Reader)--->文本(Reader)--->设备(硬盘文件 FileReader) --->高效(BufferedReader)
  57.                         bufr =new BufferedReader(new InputStreamReader(new FileInputStream(sourceJavaFile), "GBK"));
  58.                         //目标(OutputStream/Writer)--->文本(Writer)--->设备(硬盘文件 FileWriter) --->高效(BufferedWriter)
  59.                         bufw =new BufferedWriter(new FileWriter(destiJavaFile));
  60.                        
  61.                         String lineContent =null;
  62.                         System.out.println(sourceJavaFile);
  63.                         while((lineContent =bufr.readLine()) !=null){
  64.                                 bufw.write(lineContent);
  65.                                 bufw.newLine();
  66.                                 bufw.flush();
  67.                         }
  68.                 }catch(IOException ioe){
  69.                         System.out.println(ioe.toString());
  70.                 }finally{
  71.                         try{
  72.                                 if(bufr !=null)
  73.                                         bufr.close();
  74.                         }catch(IOException ioe){
  75.                                 System.out.println(ioe.toString());
  76.                         }
  77.                        
  78.                         try{
  79.                                 if(bufw !=null)
  80.                                         bufw.close();
  81.                         }catch(IOException ioe){
  82.                                 System.out.println(ioe.toString());
  83.                         }
  84.                 }
  85.         }

  86.         private static void getQualifiedFilesList(File sourceFileDir,
  87.                         List<File> filteredJavaFileList, String fileNameRegex) {
  88.                 File[] files =sourceFileDir.listFiles();

  89.                 //递归获取符合fileNameRegex标准的java源文件列表
  90.                 for(int x =0; x <files.length; x++){
  91.                         if(files[x].isDirectory()) //遍历的是目录
  92.                                 getQualifiedFilesList(files[x], filteredJavaFileList, fileNameRegex);
  93.                         else{//遍历到的是文件
  94.                                 String oldFileCanonicalName =files[x].getName();
  95.                                 //符合要求规则的全部加进来
  96.                                 if(oldFileCanonicalName.matches(fileNameRegex)){
  97.                                         //添加符合条件的源文件对象
  98.                                         filteredJavaFileList.add(files[x]);
  99.                                 }
  100.                         }
  101.                 }
  102.                
  103.         }
  104. }
复制代码

作者: 在乎..    时间: 2013-7-11 18:56
楼上正解
作者: 吴光新    时间: 2013-7-12 00:22
本帖最后由 Jiewin 于 2013-7-12 00:38 编辑

只加一个数组一个for循环就可以了
  1. import java.io.*;
  2. /*
  3. 9、 编写一个程序,将d:\java 目录下的所有.java 文件复制
  4. 到d:\jad 目录下,并将原来文件的扩展名从.java 改为.jad。
  5. */
  6. class Test9{
  7.     public static void main(String[] args){
  8.         copy();
  9.     }
  10.     public static void copy() {
  11.         BufferedReader bufr=null;
  12.         BufferedWriter bufw=null;
  13.         try{
  14.             //打印到控制台作为演示的话,没必要遍历,感觉没有意义。懂思想是什么就行。
  15.             String[] arr = new String[]{"001.txt","002.txt","003.txt"};
  16.             //定义个保存路径,可以不写,就默认到当前路径下。
  17.             String savePath = "C:\\";  
  18.             for(int x=0; x<arr.length;x++){
  19.                 bufr=new BufferedReader(new FileReader(arr[x]));
  20.                 bufw=new BufferedWriter(new FileWriter(savePath+"附件"+arr[x]));//这里我只知道一次复制一个文件,如果复制多个怎么搞?是不是用for循环?
  21.                 String line=null;
  22.                 while((line=bufr.readLine())!=null){
  23.                     bufw.write(line);
  24.                     bufw.newLine();
  25.                     bufw.flush();
  26.                 }
  27.             }
  28.         }
  29.         catch (IOException e){
  30.                 System.out.print("读写失败");
  31.         }
  32.         finally{
  33.             try{
  34.                 if(bufw!=null)
  35.                     bufw.close();
  36.             }
  37.             catch (IOException e){
  38.                 System.out.print("关闭写操作失败");
  39.             }
  40.             try{
  41.                 if(bufr!=null)
  42.                     bufr.close();
  43.             }
  44.             catch (IOException e){
  45.                 System.out.print("关闭读操作失败");
  46.             }
  47.         }
  48.     }
  49. }
复制代码

作者: chslzj    时间: 2013-7-12 08:09
张歆明 发表于 2013-7-11 16:36
这是我以前做过的一道题目  里面涉及了你的要求   我现在把他复制给你 你看下 能帮到你么 ...

这不是答题拿技术分的题目么?
作者: 张歆明    时间: 2013-7-12 08:28
chslzj 发表于 2013-7-12 08:09
这不是答题拿技术分的题目么?

对啊  我答完了  有人正好需要 我正好发现这个功能我写过 拿出来给他看下 没什么问题吧   会才是目的
作者: 云游天下    时间: 2013-7-13 22:33
我正需要这个呢 看看研究一下
作者: chslzj    时间: 2013-7-13 22:35
本帖最后由 chslzj 于 2013-7-13 22:36 编辑

哎,努力加油吧




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