黑马程序员技术交流社区

标题: 用递归列数所有文件时的问题 [打印本页]

作者: 苏克    时间: 2013-1-20 17:29
标题: 用递归列数所有文件时的问题
本帖最后由 张向辉 于 2013-1-22 11:20 编辑

public static void main(String[] argv) {
  File dir=new File("F://");
  DiGui.showDir(dir);
}
public static void showDir(File dir){
  File[] files=dir.listFiles();
  for(File f:files){
   
   if(f.isDirectory()){
    showDir(f);
   }else{
    System.out.println(f);
   }
  }
}
每次运行就会出现空指针异常。

但是当把File dir=new File("F://tomcat");的时候就没有问题。
求高手解决。

作者: 黄锦成    时间: 2013-1-20 17:39
这个我试了一下,没有问题
作者: 温立华    时间: 2013-1-20 17:41
我测试下先。
作者: 温立华    时间: 2013-1-20 17:53
同求高手解答。
作者: 黑马张英涛    时间: 2013-1-20 17:56
本帖最后由 黑马张英涛 于 2013-1-20 18:15 编辑

好像是访问Config.msi的时候出的问题,这个文件直接点击拒绝访问。
作者: 王少雷    时间: 2013-1-20 18:24
代码没问题。
是除了C 都有RECYCLER
RECYCLER作的怪吧。
作者: 夏振博    时间: 2013-1-20 18:53
本帖最后由 arno942 于 2013-1-20 18:55 编辑

如果直接访问盘符下,不判断会出空指针,因为盘符下有的文件是不允许你访问的,当访问它的时候 会返回null ,如果访问F:\\xxx就不用判断,直接盘符下就要判断了
  1. import java.io.File;

  2. public class Test {
  3.         public static void main(String[] argv) {
  4.                 File dir = new File("F://");
  5.                 showDir(dir);
  6.         }

  7.         public static void showDir(File dir) {
  8.                 File[] files = dir.listFiles();
  9.                 if (files != null) {
  10.                         for (File f : files) {

  11.                                 if (f.isDirectory()) {
  12.                                         showDir(f);
  13.                                 } else {
  14.                                         System.out.println(f);

  15.                                 }
  16.                         }
  17.                 }
  18.         }
  19. }
复制代码

作者: Rancho_Gump    时间: 2013-1-20 21:14
这个程序我也试了下  各个盘都试了下 都能运行  不知道什么样的文件可以导致出现NULL的情况呢 Config.msi 不能导致  RECYCLER没试 我的是NTFS分区 没有这样的文件 高手请进啊
作者: 黑马-项泽宇    时间: 2013-1-20 23:42
当遍历的文件没有访问权限时会返回空指针,在for循环之前做一次判断。
具体如下图所示:







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