黑马程序员技术交流社区

标题: 关于io流异常--列出指定路径下所有文件目录 [打印本页]

作者: 苗润    时间: 2014-5-14 11:36
标题: 关于io流异常--列出指定路径下所有文件目录
本帖最后由 苗润 于 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, 下载次数: 42)

为什么有异常

为什么有异常

作者: 凝霜的枯藤    时间: 2014-5-14 17:06
因为遍历到F盘下的“System Volume Information”目录时,这是每个分区下都有的系统目录,用户没有访问权限,所以调用listFiles方法会返回null。
作者: 苍穹的雨    时间: 2014-5-14 18:44
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());
                 }
         }

作者: 苗润    时间: 2014-5-14 19:09
苍穹的雨 发表于 2014-5-14 18:44
java虚拟机没有办法访问系统的一些系统文件夹,你可以跳过他们,稍微改下代码就好了,将listFile方法修改下 ...

谢谢懂了
作者: 苗润    时间: 2014-5-14 19:13
凝霜的枯藤 发表于 2014-5-14 17:06
因为遍历到F盘下的“System Volume Information”目录时,这是每个分区下都有的系统目录,用户没有访问权限 ...

谢谢懂了




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