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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邵阳 中级黑马   /  2012-8-18 09:09  /  1892 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

需求:列出指定目录下文件或者文件夹,包含子目录中的内容。也就是列出指定目录下的所有内容。
代码如下
import java.io.*;
class DiGui_1
{
public static void main(String[]args)
{
  File dir=new File("e:\\");
  showDir(dir);
}
public static void showDir(File dir)
{
  System.out.println(dir);
  File[]files=dir.listFiles();
  for (int x=0;x<files.length ;x++ )
  {
   if(files[x].isDirectory())
    showDir(files[x]);
   else
    System.out.println(files[x]);
  }
}
}
结果怎么是
D:\java\zuoye\file>java DiGui_1
e:\
e:\$RECYCLE.BIN
e:\$RECYCLE.BIN\S-1-5-21-1067235349-3175385825-1744776708-1000
e:\$RECYCLE.BIN\S-1-5-21-1067235349-3175385825-1744776708-1000\desktop.ini
e:\$RECYCLE.BIN\S-1-5-21-2872404224-3370634769-2218778021-500
e:\$RECYCLE.BIN\S-1-5-21-2872404224-3370634769-2218778021-500\desktop.ini
e:\360Rec
e:\360Rec\20120526
e:\360Rec\20120526\2033C.vir
e:\RECYCLER
e:\RECYCLER\S-1-5-18
e:\RECYCLER\S-1-5-18\desktop.ini
e:\RECYCLER\S-1-5-18\INFO2
e:\RECYCLER\S-1-5-21-1220945662-1500820517-1417001333-500
e:\RECYCLER\S-1-5-21-1220945662-1500820517-1417001333-500\desktop.ini
e:\RECYCLER\S-1-5-21-1220945662-1500820517-1417001333-500\INFO2
e:\RECYCLER\S-1-5-21-3027779725-3314400031-2191039975-500
e:\RECYCLER\S-1-5-21-3027779725-3314400031-2191039975-500\desktop.ini
e:\RECYCLER\S-1-5-21-3027779725-3314400031-2191039975-500\INFO2
e:\RECYCLER\S-1-5-21-343818398-117609710-682003330-500
e:\RECYCLER\S-1-5-21-343818398-117609710-682003330-500\desktop.ini
e:\RECYCLER\S-1-5-21-343818398-117609710-682003330-500\INFO2
e:\RECYCLER\S-1-5-21-448539723-606747145-1177238915-500
e:\RECYCLER\S-1-5-21-448539723-606747145-1177238915-500\desktop.ini
e:\RECYCLER\S-1-5-21-448539723-606747145-1177238915-500\INFO2
e:\RECYCLER\S-1-5-21-725345543-838170752-2146829589-500
e:\RECYCLER\S-1-5-21-725345543-838170752-2146829589-500\desktop.ini
e:\RECYCLER\S-1-5-21-725345543-838170752-2146829589-500\INFO2
e:\System Volume Information
Exception in thread "main" java.lang.NullPointerException
        at DiGui_1.showDir(myfile.java:179)
        at DiGui_1.showDir(myfile.java:182)
        at DiGui_1.main(myfile.java:173)
D:\java\zuoye\file>

然后我改成"e:\\邵阳文件"。都不会出现问题。
会不会是e盘上的隐藏的系统文件,是递归出现了异常。

QQ截图20120818090420.png (49.36 KB, 下载次数: 1)

QQ截图20120818090420.png

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

2 个回复

正序浏览
你可以先改变System Volume Information的访问权限,方法如下:
1. 单击开始,然后单击我的电脑。
2. 在工具菜单上,单击文件夹选项。
3. 在查看选项卡上,单击"显示隐藏文件或文件夹"。
4. 清除"隐藏受保护的操作系统文件(推荐)"复选框。在提示您确定更改时,单击是。
5. 清除"使用简单文件共享(推荐)"复选框。
6. 单击确定。
7. 右击根文件夹中的 System Volume Information 文件夹,然后单击属性。
8. 单击安全性选项卡。
9. 单击添加,然后键入要授予该文件夹访问权限的用户的名称。通常,这是您登录时使用的帐户。单击确定,然后单击确定。

然后再运行你的程序,就没问题了
回复 使用道具 举报
这是因为在你的e盘存在这个文件

而这个文件的属性是
所以会有Exception in thread "main" java.lang.NullPointerException这个错误。
如我的代码是:
import java.io.*;
class DiGui
{
public static void main(String[]args)
{
   File dir=new File("e:\\System Volume Information");
   showDir(dir);
}
public static void showDir(File dir)
{
   System.out.println(dir);
   File[]files=dir.listFiles();
   for (int x=0;x<files.length ;x++ )
   {
    if(files[x].isDirectory())
     showDir(files[x]);
    else
     System.out.println(files[x]);
   }
}
}
运行结果就是:
e:\System Volume Information
Exception in thread "main" java.lang.NullPointerException
        at DiGui.showDir(DiGui.java:13)
        at DiGui.main(DiGui.java:7)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马