黑马程序员技术交流社区

标题: 求助:下面是一个扫描当前目录下文件并输出到文本的一个程序,为啥只能完整的扫描e盘 [打印本页]

作者: 潜伏    时间: 2013-11-29 21:50
标题: 求助:下面是一个扫描当前目录下文件并输出到文本的一个程序,为啥只能完整的扫描e盘
/*
列出指定目录下的文件,文件夹,包括子目录下面的文件
*/
import java.io.*;
class Mulushuchu
{
        public static void main(String[] args) throws Exception
        {
                File dir=new File("d:");
                StringBuilder sb=new StringBuilder();
                //System.out.println(sb.toString());
                FileWriter w=new FileWriter("3.txt");
                BufferedWriter fw=new BufferedWriter(w);
                show(dir,fw);
                fw.close();

        }

        public static void show(File dir,BufferedWriter fw)throws Exception       
        {       
                //System.out.println(dir);
                File[] arr=dir.listFiles();
                for(File f:arr)
                {       
                        if(!f.isHidden()&&f.isDirectory())
                        {
                                show(f,fw);//递归
                        }
                        else
                        {       
                                fw.write(f.getPath());
                                fw.newLine();
                                fw.flush();
                        }

                }
        }
}

作者: HAnG    时间: 2013-11-29 22:30
你代码写的是扫描d盘,我猜你问的应该是为什么d盘扫描到一半会报错吧?
因为你代码用了递归的方法,你d盘中的文件夹太多,递归次数很多,每次递归栈内存中就增加一个函数,然后就内存溢出了。
作者: 冯晓骏    时间: 2013-11-29 23:45
  1. import java.io.*;
  2. class Test
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 File dir=new File("d:");
  7.                 //File dir=new File("d:\\");       
  8.                 FileWriter w=new FileWriter("Test\\3.txt");
  9.                 BufferedWriter fw=new BufferedWriter(w);
  10.                
  11.                 show(dir,fw);
  12.                 fw.close();

  13.         }

  14.         public static void show(File dir,BufferedWriter fw)        
  15.         {        

  16.                 System.out.println(dir.getAbsolutePath());

  17.                 System.out.println(dir.getPath());
  18.                
  19.                 System.out.println(dir.getParent());
  20.                
  21.             File[] arr=dir.listFiles();

  22.                 for(File f:arr)
  23.                 {        
  24.                         System.out.println(f.getPath()+":"+f.getName());
  25. //                        if(!f.isHidden()&&f.isDirectory())
  26. //                        {
  27. //                                System.out.println(111);
  28. //                                show(f,fw);//递归
  29. //                        }
  30. //                        else
  31. //                        {        
  32. //                                fw.write(f.getPath());
  33. //                                fw.newLine();
  34. //                                fw.flush();
  35. //                        }

  36.                 }
  37.         }
  38. }
复制代码

用getAbsolutePath()方法调用
如果dir是写“d:”,绝对路径是你工程的目录
如果dir是写“d:\\”,绝对路径就是D盘
但我不知道这是为什么,开了个帖子大家一起讨论吧
http://bbs.itheima.com/thread-101212-1-1.html




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