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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
列出指定目录下的文件,文件夹,包括子目录下面的文件
*/
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();
                        }

                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 淡定

查看全部评分

2 个回复

倒序浏览
你代码写的是扫描d盘,我猜你问的应该是为什么d盘扫描到一半会报错吧?
因为你代码用了递归的方法,你d盘中的文件夹太多,递归次数很多,每次递归栈内存中就增加一个函数,然后就内存溢出了。
回复 使用道具 举报
  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

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马