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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 JarryHorse 于 2015-4-29 16:54 编辑
  1. /*
  2. 需求:用File类创建一个包含某文件夹中文件目录的文本文件的代码示例
  3. */

  4. import java.io.*;   //导入IO中的类
  5. import java.util.*;  //导入集合所在包中的类

  6. //定义类
  7. class  FileDemo
  8. {
  9.         //主函数
  10.         public static void main(String[] args)
  11.         {
  12.                 //创建一个File对象,传入一个路径的字符串表示
  13.                 File fi = new File("d:\\codefile\\Javas");
  14.                 //创建一个List集合,用于存放文件名
  15.                 List<String> list = new ArrayList<String>();
  16.                 //判断一下File表示的路径是否存在,是否是目录
  17.                 if (fi.exists())
  18.                 {
  19.                         if (fi.isDirectory())
  20.                         {
  21.                                 //调用自定义遍历文件夹的方法,将文件夹中的文件名和绝对路径字符串存入list集合中
  22.                                 dirList(list,fi);
  23.                  
  24.                         }
  25.                 }
  26.                
  27.                 //创建一个字符流引用
  28.                 BufferedWriter bufw = null;
  29.                         
  30.                 try
  31.                 {
  32.                         //创建一个带缓冲的文件字符写入流,传入要写入数据的文件名
  33.                         bufw = new BufferedWriter(new FileWriter("dirList.txt"));
  34.                         //遍历list集合,将集合中的文件名字符串写入流中,并刷新到目的地
  35.                         for (String str:list)
  36.                         {
  37.                                 bufw.write(str);
  38.                                 bufw.newLine();    //每条换行一次
  39.                                 bufw.flush();    //刷新
  40.                         }
  41.                         
  42.                 }
  43.                 //处理IO异常
  44.                 catch (IOException e)
  45.                 {
  46.                         e.printStackTrace();
  47.                 }
  48.                 //最后要关流
  49.                 finally
  50.                 {
  51.                         //在里面单独try关流时抛出的异常
  52.                         try
  53.                         {
  54.                                 //如果流存在才关
  55.                                 if (bufw != null)
  56.                                 {
  57.                                         bufw.close();
  58.                                 }
  59.                         }
  60.                         catch (IOException e)
  61.                         {
  62.                                 e.printStackTrace();
  63.                         }
  64.                
  65.                 }

  66.         }
  67.         
  68.         //定义一个遍历目录中文件的方法
  69.         public static void dirList(List<String> list,File fi)
  70.         {
  71.                
  72.                 String[] ff = fi.list();
  73.                 if(ff!= null)
  74.                 {
  75.                         //取出文件夹中的目录和文件的数组,并遍历
  76.                         for(String str:fi.list())
  77.                         {
  78.                                 //加入绝对路径
  79.                                 File file = new File(str).getAbsoluteFile();
  80.                                 if (file.isDirectory())
  81.                                 {
  82.                                         list.add(file.toString());
  83.                                         dirList(list,file);
  84.                                 }
  85.                                 else
  86.                                 {
  87.                                         list.add(file.toString());
  88.                                 }
  89.                         }
  90.                 }
  91.         }
  92. }
复制代码
文件夹里面是有大量文件和文件夹的,只读出了第一层目录的文件和文件夹,但是没有递归到文件夹里面读文件,用Eclipse  debug时读到递归时直接顺序读下去了,没有跳转递归,找不到哪里出问题了,烦啊!!!!!!

1 个回复

倒序浏览
本帖最后由 JarryHorse 于 2015-4-29 18:47 编辑

终于弄明白了,用表示相对路径的字符串new出来的文件对象无法获取它的绝对路径,所以不能用getAbsoluFile方法,只能用原来的路径续上去再new一个文件对象,或者直接用listFiles方法获取一个文件对象数组来遍历递归。至于为什么能获取到第一层文件夹的文件和目录名的问题,应该是因为我这个文件本身就在要获取的路径中,所以在用字符串new出来的文件对象就直接默认自己的根目录是当前目录了,所以才能将当前目录的那层文件和文件夹提取出来,哎!被搞死了,下次小心
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马