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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 追逐我的明天 中级黑马   /  2014-8-22 20:17  /  1395 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. package LX;

  2. import java.awt.Window.Type;
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.BufferedReader;
  6. import java.io.BufferedWriter;
  7. import java.io.File;
  8. import java.io.FileInputStream;
  9. import java.io.FileNotFoundException;
  10. import java.io.FileOutputStream;
  11. import java.io.FileReader;
  12. import java.io.FileWriter;
  13. import java.io.IOException;
  14. import java.io.InputStream;
  15. import java.io.InputStreamReader;
  16. import java.io.OutputStream;
  17. import java.io.OutputStreamWriter;
  18. import java.util.ArrayList;
  19. import java.util.Iterator;


  20. public class Demo16LX1 {
  21.         public static void main(String[] args) throws IOException {
  22.                 File lu = new File("D:\\");
  23.                 ChaZ(lu,".java");
  24.         }

  25.         private static void ChaZ(File lu,String zhi) throws IOException {
  26.                 FileOutputStream out = new FileOutputStream("P:\\哈喽\\筛选后的结果.txt"); //创建个文件输出流
  27.                 OutputStreamWriter qiao = new OutputStreamWriter(out);  //创建个桥梁
  28.                 File[] suzu = lu.listFiles(new lianxi(zhi)); //获取目录下所有文件 放到File数组中
  29.                 for(File a : suzu) //循环遍历数组中的每一个元素
  30.                 {
  31.                         if(a.isDirectory())  //判断这个数组是否是文件夹
  32.                         {
  33.                                 ChaZ(a,".java"); //如果是文件夹 则用这个文件夹的目录重新调用这个方法
  34.                         }
  35.                         else
  36.                         {
  37.                                 if(a.isFile())
  38.                                 {
  39.                                                 String lujing = a.getAbsolutePath();   //把这个文件的绝对路径获取到
  40.                                                 qiao.write(lujing);
  41.                                                 qiao.flush();
  42.                                 }
  43.                         }
  44.                 }
  45.                 qiao.close();
  46.         }       
  47. }

  48. [code]package LX;

  49. import java.io.File;
  50. import java.io.FilenameFilter;

  51. public class lianxi implements FilenameFilter {
  52.         private String zhi;
  53.         public lianxi(String zhi)
  54.         {
  55.                 this.zhi = zhi;
  56.         }
  57.         @Override
  58.         public boolean accept(File arg0, String arg1) {
  59.                 return arg1.endsWith(this.zhi);
  60.         }

  61. }
复制代码
[/code]
大神 们 我这个文件创建了但是没有值啊 这是为什么 求告诉

11 个回复

倒序浏览
你这个文档30行,创建文件会在每次调用这个函数都会重新创建空文件替代。所以会是一个空文件,解决办法,将其建立在方法外,或者创建续写流。
回复 使用道具 举报
hejinzhong 发表于 2014-8-22 20:36
你这个文档30行,创建文件会在每次调用这个函数都会重新创建空文件替代。所以会是一个空文件,解决办法,将 ...

哥们的意思是?我每递归一次都会给这个文件重新覆盖一次是吗?
回复 使用道具 举报
追逐我的明天 发表于 2014-8-22 20:44
哥们的意思是?我每递归一次都会给这个文件重新覆盖一次是吗?

嗯,是这个意思
回复 使用道具 举报

我加了续写流还是不好使啊
  1. package LX;

  2. import java.awt.Window.Type;
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.BufferedReader;
  6. import java.io.BufferedWriter;
  7. import java.io.File;
  8. import java.io.FileInputStream;
  9. import java.io.FileNotFoundException;
  10. import java.io.FileOutputStream;
  11. import java.io.FileReader;
  12. import java.io.FileWriter;
  13. import java.io.IOException;
  14. import java.io.InputStream;
  15. import java.io.InputStreamReader;
  16. import java.io.OutputStream;
  17. import java.io.OutputStreamWriter;
  18. import java.util.ArrayList;
  19. import java.util.Iterator;


  20. public class Demo16LX1 {
  21.         public static void main(String[] args) throws IOException {
  22.                 File lu = new File("D:\\");
  23.                 ChaZ(lu,".java");
  24.         }

  25.         private static void ChaZ(File lu,String zhi) throws IOException {
  26.                 FileOutputStream out = new FileOutputStream("P:\\哈喽\\筛选后的结果.txt",true); //创建个文件输出流
  27.                 OutputStreamWriter qiao = new OutputStreamWriter(out);  //创建个桥梁
  28.                 File[] suzu = lu.listFiles(new lianxi(zhi)); //获取目录下所有文件 放到File数组中
  29.                 for(File a : suzu) //循环遍历数组中的每一个元素
  30.                 {
  31.                         if(a.isDirectory())  //判断这个数组是否是文件夹
  32.                         {
  33.                                 ChaZ(a,zhi); //如果是文件夹 则用这个文件夹的目录重新调用这个方法
  34.                         }
  35.                         else
  36.                         {
  37.                                 if(a.isFile())
  38.                                 {
  39.                                                 String lujing = a.getAbsolutePath();   //把这个文件的绝对路径获取到
  40.                                                 qiao.write(lujing);
  41.                                                 qiao.flush();
  42.                                 }
  43.                         }
  44.                 }
  45.                 qiao.close();
  46.         }       
  47. }

复制代码

点评

File[] suzu = lu.listFiles(new lianxi(zhi)); 你这个过滤后返回的只是第一级目录下的java 文件,下面迭代判断没有啥意义。如果第一级目录没有.java 则还是空  发表于 2014-8-22 21:02
回复 使用道具 举报
追逐我的明天 发表于 2014-8-22 20:53
我加了续写流还是不好使啊

你这就没递归成功
回复 使用道具 举报
路过。。。。。。。
回复 使用道具 举报
  1. import java.io.*;

  2. public class ListFileDemo
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 File file = new File("D:\\software");// 想要遍历的文件夹
  7.                 BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\list.txt"));// 遍历结果的存放位置
  8.                 String endstr = ".java";//遍历文件的结束标志
  9.                 listFile(file, bw, endstr);
  10.                 bw.close();

  11.         }

  12.         public static void listFile(File f, BufferedWriter bw, String endstr)
  13.                         throws IOException
  14.         {
  15.                 File[] files = f.listFiles();
  16.                 for (File file : files)
  17.                 {
  18.                         if (file.isDirectory())
  19.                         {
  20.                                 listFile(file, bw, endstr);
  21.                         }
  22.                         else
  23.                         {
  24.                                 if (file.getName().endsWith(endstr))
  25.                                 {
  26.                                         bw.write(file.getName());
  27.                                         bw.newLine();
  28.                                 }
  29.                         }
  30.                 }
  31.         }
  32. }
复制代码


这个应该可以实现你需要的功能
回复 使用道具 举报
  学习了
回复 使用道具 举报
happymouse 发表于 2014-8-24 01:06
这个应该可以实现你需要的功能

我怎么感觉和我写的一样  基本上意思是一样的 我的为什么不好使坑死了
回复 使用道具 举报
追逐我的明天 发表于 2014-8-24 22:25
我怎么感觉和我写的一样  基本上意思是一样的 我的为什么不好使坑死了

建议把类名,成员变量名起的专业点,否则看着赶脚有点山寨
和程序无关,只是个人看法哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马