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

就是想将指定目录下的所有文件和文件夹名字存到   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. }
复制代码



8 个回复

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

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

这不是毕老师的方法么。。。我写代码都写在老师前面。。所以视频没看完就把代码写出来了。。我是才看到毕老师讲的。。。
回复 使用道具 举报
这个单例设计不知如何实现饿汉式。。。  大家给点建议哈。。。
回复 使用道具 举报
我觉得现在就很好了呀  何必要改呢
回复 使用道具 举报
。。。。。
回复 使用道具 举报
榨菜 高级黑马 2014-5-19 22:31:45
9#
直接 private static FileWriter fw = new FileWriter("d:q.txt")   这个就是饿汉式      建议你每单用到资源的时候都用try{}finally{fw.close()}   强制让自己记住最后要关流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马