A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 想要那片海 于 2015-5-6 22:13 编辑

第9题:编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt

在EditPlus编写的代码,通过dos命令行运行没问题,可是用eclipse运行却失败了,到底是什么原因呢?
  1. /*

  2. 步骤:
  3. 1、定义一个方法,获取指定目录下的所有.java文件,如果该目录下还有文件夹,则通过递归的方法遍历所有的.java文件,
  4. 并且将最终获取的.java型文件的文件名存储到List集合中
  5. 2、定义一个copy的方法,方法中通过集合的迭代,依据文件名逐一对文件进行复制,因为都是纯文本型的文件,
  6. 所以用到的流是Reader和Writer流,而为了进行高效的读取,则需要使用缓冲流
  7. BufferedReader和BufferedWriter


  8. */
  9. package com.itheima;
  10. import java.io.*;
  11. import java.util.*;
  12. class  Test9
  13. {
  14.         public static void main(String[] args)
  15.         {
  16.                 File fromFile=new File("E:\\test9");//制定一个源路径
  17.                 File toFile=new File("E:\\testCopy9");//定义一个目的路径
  18.                 List<String> list = new ArrayList<String>();//定义一个数组,用来存储获取源路径中的.java文件名
  19.                 searchFile(fromFile,list);//在源路径下查找符合条件的文件名,存储到数组中;

  20.                 Iterator<String> it=list.iterator();//通过数组迭代器获取文件名,进行文件复制
  21.                 while(it.hasNext())
  22.                 {
  23.                         String files=it.next();
  24.                         System.out.println(files);//这条输出语句可以检检差在查找、复制哪个文件是出现问题
  25.                         copyFile(files,toFile);
  26.                
  27.                 }

  28.         }
  29.         //定义一个查找文件方法,接收一个源目录和一个List集合
  30.         
  31.         public static void searchFile(File fromFile,List<String> list)
  32.         {
  33.                  if(fromFile.exists() && fromFile.isDirectory())//判断源路径下是不是存在文件并且这是一个有效路径
  34.                         {
  35.                                 File[] arr=fromFile.listFiles();//创建一个File型的数组,用来存储获取的文件列表
  36.                                 for(File files : arr)//使用高级for循环遍历数组
  37.                                 {
  38.                                         if(files.isDirectory())
  39.                                            searchFile(files,list);//如果获取到的文件还是一个目录则进行递归,进一步查找目录下的文件
  40.                                         else if(files.getName().endsWith(".java"))
  41.                                            list.add(files.getName());//如果是.java类型的文件则将文件名存储到数组中        
  42.                                         else
  43.                                                 continue;//如果遍历到的文件既不是文件夹也不是.java类型的文件,则结束本次循环,继续执行下一次循环遍历下一个文件

  44.                                 //System.out.println(list);
  45.                                 }
  46.                          }
  47.                  else
  48.                     System.out.println("源路径无效");
  49.         }
  50.         /**/

  51.         //定义一个copy方法,接收一个源文件的文件名和一个目的文件
  52.     public static void copyFile(String from,File to)
  53.         {
  54.                 BufferedReader readFile=null;
  55.                 BufferedWriter writeFile=null;
  56.                 try
  57.                 {
  58.            //通过文件名建立一个文件关联,并且将FileReader对象作为参数传入字符读取缓冲区中,进行高效读取
  59.                         
  60.                         readFile=new BufferedReader(new FileReader(new File(from)));
  61.                         
  62.                         //给定一个目的存储目录,在这个目录下建立相应的复制后的文件,而且这个复制的目的文本文件名是将.java后缀替换成.txt的
  63.                         writeFile=new BufferedWriter(new FileWriter(new File(to,from.replace("\\.java[        DISCUZ_CODE_0        ]quot;,".txt"))));
  64.                
  65.                     String line=null;
  66.                         while((line=readFile.readLine())!=null)//判断:如果读取流没有读到文件的结尾
  67.                         {
  68.                                 //System.out.println(line);
  69.                                 writeFile.write(line);//将读取到的内容写入到缓冲流中
  70.                                 writeFile.newLine();//换行
  71.                                 writeFile.flush();//刷新
  72.                         }
  73.                         System.out.println("复制文件成功");
  74.                         
  75.                 }
  76.                 catch (IOException e)
  77.                 {
  78.                         System.out.println("复制文件失败");
  79.                 }
  80.                 finally
  81.                 {
  82.                   try
  83.                   {
  84.                         if(readFile!=null)//如果关联被读取的文件成功,则在执行完毕后关闭该读取流
  85.                           readFile.close();   
  86.                         
  87.                   }
  88.                  catch (IOException e)
  89.                         {
  90.                                 System.out.println("读取流关闭失败");
  91.                         }
  92.                         try
  93.                   {
  94.                         if(writeFile!=null)//如果写入流创建成功,则在执行完毕后关闭该写入流
  95.                           writeFile.close();  
  96.                   }
  97.                  catch (IOException e)
  98.                         {
  99.                                 System.out.println("写入流关闭失败");
  100.                         }
  101.                 }
  102.         
  103.         
  104.         }
  105. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马