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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 苗润 于 2014-5-14 19:12 编辑

为什么在所有目录列出来以后 会有异常  这个程序是打印F:\所有目录
public class test2 {
        public static void main(String[] args) throws Exception{
               
                String path = "f:\\";
                File file = new File(path);
                listFile(file,0);
        
               
        }
        public static void listFile(File file,int level){
               
                if(!file.isFile()){
                        System.out.println(getLevel(level)+file.getName());
                        File[] fi = file.listFiles();
                        level++;
                        for(File f : fi){
                                listFile(f,level);
                        }
                }else{
                        System.out.println(getLevel(level)+file.getName());
                }
        }
        public static String getLevel(int level){
                StringBuffer sb = new StringBuffer();
                for(int i = 0;i<level;i++){
                        if(level==0){
                                return "";
                        }
                        sb.append("  ");
                }
                sb.append("|--");
               
                return sb.toString();
        }
               



`30F1G_J6BB_)V21YO%(IRY.jpg (48 KB, 下载次数: 22)

为什么有异常

为什么有异常

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
因为遍历到F盘下的“System Volume Information”目录时,这是每个分区下都有的系统目录,用户没有访问权限,所以调用listFiles方法会返回null。
回复 使用道具 举报 1 0
java虚拟机没有办法访问系统的一些系统文件夹,你可以跳过他们,稍微改下代码就好了,将listFile方法修改下


public static void listFile(File file,int level){               
                if(!file.isFile()){
                         System.out.println(getLevel(level)+file.getName());
                         File[] fi = file.listFiles();
                         level++;
                         for(File f : fi){
                             if (!f.isHidden())   //修改了这里,这样就不会访问系统自动隐藏的系统文件夹了,但其他隐藏的文加件也无法显示了
                                 listFile(f,level);
                         }
                 }else{
                         System.out.println(getLevel(level)+file.getName());
                 }
         }

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
苍穹的雨 发表于 2014-5-14 18:44
java虚拟机没有办法访问系统的一些系统文件夹,你可以跳过他们,稍微改下代码就好了,将listFile方法修改下 ...

谢谢懂了
回复 使用道具 举报
凝霜的枯藤 发表于 2014-5-14 17:06
因为遍历到F盘下的“System Volume Information”目录时,这是每个分区下都有的系统目录,用户没有访问权限 ...

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