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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李文思 中级黑马   /  2015-7-11 15:23  /  656 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. ------<a  target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
复制代码
自己根据所学的视频做的基础测试题第9题,刚开始学,希望大家能给出改进意见,谢谢。
  1. package com.itheima;

  2. import java.io.*;
  3. import java.util.ArrayList;


  4. /**
  5. * 9、 编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
  6. *         答;1,获取目录下所有java文件对象存入集合中
  7. *           2,将集合中所有文件拷贝到指定目录下并将护展名改为.txt
  8. * @author liwensi
  9. * */
  10. public class Test9 {
  11.         public static void main(String[] args){
  12.                
  13.                 //定义被拷贝java文件的目录,该目录必须已存在
  14.                 File start = new File("D:\\java");
  15.                
  16.                 //创建一个集合用于存储java文件对象
  17.                 ArrayList<File> list = new ArrayList<File>();
  18.                
  19.                 //定义java文件的目的地,硬盘上必须有该盘符。
  20.                 File end = new File("E:\\copyjava\\java");

  21.                 try {
  22.                         //获取目录下所有java文件存入集合中
  23.                         getJavaFile(start,list);
  24.                        
  25.                         //将集合中的元素拷贝到指定目录下
  26.                         copyFileList(list,end);
  27.                        
  28.                 } catch (IOException e) {
  29.                         e.printStackTrace();
  30.                 }
  31.         }
  32.        

  33.         /**
  34.          * 将目录下java文件存入集合中
  35.          * @param start 起始目录
  36.          * @param list 集合
  37.          * */
  38.         public static void getJavaFile(File start, ArrayList<File> list) {
  39.                
  40.                 //获取目录下的所有文件目录
  41.                 File[] arr = start.listFiles();
  42.                
  43.                 //遍历数组,并且判断数组中元素是目录还是文件
  44.                 for (File file:arr) {
  45.                         if (file.isDirectory()) {
  46.                                 getJavaFile(file,list);
  47.                         }
  48.                         else if(file.getName().endsWith(".java")) {
  49.                                 list.add(file);
  50.                         }
  51.                 }
  52.         }

  53.         /**
  54.          * 将集合中的java文件拷贝到指定目录
  55.          * @param list 存有java文件的集合
  56.          * @param end 目录
  57.          * @throws IOException
  58.          * */
  59.         public static void copyFileList(ArrayList<File> list, File end) throws IOException {
  60.                
  61.                 //判断指定目录是否存在,如果不存在则创建所有该目录,包括所有不存在但必需的目录
  62.                 if(! end.exists())
  63.                         end.mkdirs();
  64.                
  65.                 //遍历集合中的元素,使用copyFile方法将文件拷贝到指定目录下
  66.                 for (File file:list) {
  67.                         copyFile(file,end);
  68.                 }
  69.         }
  70.        
  71.         /**
  72.          * 将后缀名.java改为.txt并将文件拷贝到指定目录
  73.          * @param file 后缀名为.java的文件
  74.          * @param end 指定目录
  75.          * @throws IOException
  76.          * */
  77.         public static void copyFile(File file, File end) throws IOException{
  78.                 //创建字符输入流与文件关联
  79.                 BufferedReader bufr = new BufferedReader(new FileReader(file));
  80.                
  81.                 //获取文件名称后将名称后缀改为.txt并创建一个文件对象
  82.                 String name = file.getName();
  83.                 name = name.substring(0, name.indexOf(".java")) + ".txt";
  84.                 File newFile = new File(end + File.separator +name);
  85.                
  86.                 //创建输出流与新文件相关联
  87.                 BufferedWriter bufw = new BufferedWriter(new FileWriter(newFile));
  88.                
  89.                 //将数据一行一行的写入文件
  90.                 String line = null;
  91.                 while((line = bufr.readLine()) != null) {
  92.                         bufw.write(line);
  93.                         bufw.newLine();
  94.                 }
  95.                
  96.                 //关闭资源
  97.                 bufr.close();
  98.                 bufw.close();
  99.         }
  100. }
复制代码

2 个回复

正序浏览
122125241 发表于 2015-7-11 15:45
为什么非要多集合一部,直接数组遍历判断不就可以了么

非常感谢您能看我写的代码,集合这一步的确是可以省略点,谢谢了。:lol
回复 使用道具 举报
为什么非要多集合一部,直接数组遍历判断不就可以了么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马