黑马程序员技术交流社区

标题: IO流-- File---遍历文件夹内容,求指点。。 [打印本页]

作者: 张然龙    时间: 2014-5-19 11:41
标题: IO流-- File---遍历文件夹内容,求指点。。
就是想将指定目录下的所有文件和文件夹名字存到   D:\demo.txt  中, 功能是实现了,但是感觉写的不怎么好。
尤其是上边的那个单例设计,不想加同步代码块,还想实现饿汉式。。该如何去解决?

求各位看官给优化下,感激不尽!!

  1. class Single
  2. {
  3.         private Single(){}
  4.         static FileWriter fw=null;
  5.         public static FileWriter sh()throws Exception
  6.         {
  7.                 if(fw==null)
  8.                         fw=new FileWriter("D:\\demo.txt");
  9.                 return fw;
  10.         }
  11. }
  12. class Demo4
  13. {
  14.         public static void main(String[] args)throws Exception
  15.         {
  16.                 File f=new File("D:\\Program Files\\打地鼠");
  17.                 show1(f,0);
  18.         }
  19.         public static void show1(File f,int num)throws Exception
  20.         {
  21.                 File file[]=f.listFiles();
  22.                 if(file!=null){
  23.                         for(int x=0;x<file.length;x++)
  24.                         {
  25.                                 for(int y=0;y<num;y++)
  26.                                         Single.sh().write("\t");
  27.                                 if(num!=0)
  28.                                         Single.sh().write("|--");
  29.                                 Single.sh().write(file[x].toString()+"\r\n");
  30.                                 if(file[x].isDirectory())
  31.                                 {
  32.                                         num++;
  33.                                         show1(file[x],num);
  34.                                         num--;
  35.                                 }
  36.                                 Single.sh().flush();
  37.                         }
  38.                 }
  39.         }
  40. }
复制代码




作者: zhrnghgwsws    时间: 2014-5-19 13:40
你这样写就是ok的。
这个根本不用加代码块,单例的懒汉式要加同步代码块是当多个线程对其操作时,才需要。
而你写的这个的是单线程的递归,不会产生安全问题,所以就不用加同步代码块。
作者: skill20    时间: 2014-5-19 16:36
1,把目录封装对象。
2,对File 的 listFiles()方法,递归,把目录下的文件存集合里。
3,对集合的文件箱咋整就咋整。
作者: 张然龙    时间: 2014-5-19 17:03
zhrnghgwsws 发表于 2014-5-19 13:40
你这样写就是ok的。
这个根本不用加代码块,单例的懒汉式要加同步代码块是当多个线程对其操作时,才需要。
...

我知道是单线程啊。。呵呵。。其实我想把它变成饿汉式。。原谅我的刨根问底吧。。。
作者: 张然龙    时间: 2014-5-19 17:05
skill20 发表于 2014-5-19 16:36
1,把目录封装对象。
2,对File 的 listFiles()方法,递归,把目录下的文件存集合里。
3,对集合的文件箱 ...

这不是毕老师的方法么。。。我写代码都写在老师前面。。所以视频没看完就把代码写出来了。。我是才看到毕老师讲的。。。
作者: 张然龙    时间: 2014-5-19 17:06
这个单例设计不知如何实现饿汉式。。。  大家给点建议哈。。。
作者: 周俊波    时间: 2014-5-19 21:22
我觉得现在就很好了呀  何必要改呢
作者: 张然龙    时间: 2014-5-19 22:11
。。。。。
作者: 榨菜    时间: 2014-5-19 22:31
直接 private static FileWriter fw = new FileWriter("d:q.txt")   这个就是饿汉式      建议你每单用到资源的时候都用try{}finally{fw.close()}   强制让自己记住最后要关流




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