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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾宇 中级黑马   /  2014-8-7 17:49  /  1765 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曾宇 于 2014-8-7 22:47 编辑
  1. import java.io.*;
  2. class showDirDemo
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 File dir = new File("d:\\");
  7.                 showDir(dir);
  8.         }
  9.         public static void showDir(File dir) throws IOException{
  10.                 BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("c:\\隐藏文件列表.txt"));
  11.                 File[] files = dir.listFiles();//列出指定目录下文件和文件夹,存入到File数组
  12.                 for(File file : files){//循环目录
  13.                         if(file.isDirectory()){//判断是否是文件夹
  14.                                 showDir(file);//如果是文件夹,继续循环判断
  15.                         }else{
  16.                                 if(file.isHidden()){//判断是否是隐藏文件
  17.                                         System.out.println(file.isHidden());
  18.                                         System.out.println(file.toString());
  19.                                         bufos.write(file.toString().getBytes());//将隐藏文件地址写入文件中
  20.                                         bufos.flush();
  21.                                 }
  22.                         }
  23.                 }
  24.                 bufos.close();
  25.         }
  26. }
复制代码

现在遇到两个问题。


    第一:代码运行显示打印几条隐藏文件后,nullpointer异常。不明白是哪里出的异常,请高手分析。

第二:对获取的隐藏文件路径输出到txt文件中,文件创建后,没有文字输出。请高手分析。









4 个回复

倒序浏览
你的代码在我电脑上完美运行,没任何错误提示;
不过针对你提出的错误,我提出几点可能的情况
1)if(file.isDirectory()){//判断是否是文件夹时你要考虑到这个文件夹是否隐藏,是否对这个文件夹没有读写权限
2)对隐藏文件夹中的隐藏文件是否具有权限
你代码我运行没问题,我觉得还是隐藏文件夹和文件读写权限的问题。
回复 使用道具 举报
确实是权限问题,
回复 使用道具 举报
草鱼狂飙 发表于 2014-8-7 18:24
你的代码在我电脑上完美运行,没任何错误提示;
不过针对你提出的错误,我提出几点可能的情况
1)if(file.i ...

打印出来的隐藏文件地址。
为了方便程序调试,e盘只剩下视频。
在显示所有文件的情况下,未找到控制台打印的隐藏文件。



造成这样的情况出现是什么原因,解决办法是什么?
回复 使用道具 举报
本帖最后由 曾宇 于 2014-8-7 23:33 编辑

自救。。。。。。。。

不是权限问题。

而是代码不够健全,犯了几个错误。

第一个错误。dir.listFiles();返回了一个null。可能是有一个文件夹,而这个文件夹中没有任何文件和文件夹。

files等于null。for循环时报错。

java给出的错误提示也是第十三行。

汗一个。

第二个错误。BufferedOutputStream在递归体中重复创建。一直是新对象。不可饶恕之错。。。。。。

第三个错误,不应该使用BufferedOutputStream 。

最后,附上修改后的代码。


  1. import java.io.*;
  2. //列出制定目录下的隐藏文件和文件夹列表,
  3. class showDirDemo
  4. {
  5.         public static void main(String[] args) throws IOException
  6.         {
  7.                 File dir = new File("d:\\");
  8.                 BufferedWriter bfw = new BufferedWriter(new FileWriter("c:\\隐藏文件列表.txt"));
  9.                 showDir(dir,bfw);
  10.                 if(bfw!=null){
  11.                         try{
  12.                                 bfw.close();
  13.                         }catch(IOException ex){
  14.                                 ex.printStackTrace();
  15.                         }
  16.                 }
  17.                
  18.         }
  19.         public static void showDir(File dir,BufferedWriter bfw){
  20.                 File[] files = dir.listFiles();//列出指定目录下文件和文件夹,存入到File数组
  21.                 if(files!=null){
  22.                         for(File file : files){//循环目录
  23.                                 if(file.isDirectory()){//判断是否是文件夹
  24.                                         showDir(file,bfw);//如果是文件夹,继续循环判断
  25.                                 }else{
  26.                                         if(file.isHidden()){//判断是否是隐藏文件
  27.                                                 try{
  28.                                                         System.out.println(file.isHidden());
  29.                                                         System.out.println(file.toString());
  30.                                                         bfw.write(file.toString());//将隐藏文件地址写入文件中
  31.                                                         bfw.newLine();
  32.                                                         bfw.flush();
  33.                                                 }
  34.                                                 catch(IOException e){
  35.                                                         System.out.println("文件写入失败!");
  36.                                                 }
  37.                                         }
  38.                                 }
  39.                                 
  40.                         }
  41.         }
  42.         }
复制代码

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