黑马程序员技术交流社区
标题: 遍历指定目录获取隐藏文件列表,问题 [打印本页]
作者: 曾宇 时间: 2014-8-7 17:49
标题: 遍历指定目录获取隐藏文件列表,问题
本帖最后由 曾宇 于 2014-8-7 22:47 编辑
- import java.io.*;
- class showDirDemo
- {
- public static void main(String[] args) throws IOException
- {
- File dir = new File("d:\\");
- showDir(dir);
- }
- public static void showDir(File dir) throws IOException{
- BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("c:\\隐藏文件列表.txt"));
- File[] files = dir.listFiles();//列出指定目录下文件和文件夹,存入到File数组
- for(File file : files){//循环目录
- if(file.isDirectory()){//判断是否是文件夹
- showDir(file);//如果是文件夹,继续循环判断
- }else{
- if(file.isHidden()){//判断是否是隐藏文件
- System.out.println(file.isHidden());
- System.out.println(file.toString());
- bufos.write(file.toString().getBytes());//将隐藏文件地址写入文件中
- bufos.flush();
- }
- }
- }
- bufos.close();
- }
- }
复制代码现在遇到两个问题。
第一:代码运行显示打印几条隐藏文件后,nullpointer异常。不明白是哪里出的异常,请高手分析。
第二:对获取的隐藏文件路径输出到txt文件中,文件创建后,没有文字输出。请高手分析。
作者: 草鱼狂飙 时间: 2014-8-7 18:24
你的代码在我电脑上完美运行,没任何错误提示;
不过针对你提出的错误,我提出几点可能的情况
1)if(file.isDirectory()){//判断是否是文件夹时你要考虑到这个文件夹是否隐藏,是否对这个文件夹没有读写权限
2)对隐藏文件夹中的隐藏文件是否具有权限
你代码我运行没问题,我觉得还是隐藏文件夹和文件读写权限的问题。
作者: 刘小印 时间: 2014-8-7 19:00
确实是权限问题,
作者: 曾宇 时间: 2014-8-7 22:21
打印出来的隐藏文件地址。
为了方便程序调试,e盘只剩下视频。
在显示所有文件的情况下,未找到控制台打印的隐藏文件。
造成这样的情况出现是什么原因,解决办法是什么?
作者: 曾宇 时间: 2014-8-7 22:44
本帖最后由 曾宇 于 2014-8-7 23:33 编辑
自救。。。。。。。。
不是权限问题。
而是代码不够健全,犯了几个错误。
第一个错误。dir.listFiles();返回了一个null。可能是有一个文件夹,而这个文件夹中没有任何文件和文件夹。
files等于null。for循环时报错。
java给出的错误提示也是第十三行。
汗一个。
第二个错误。BufferedOutputStream在递归体中重复创建。一直是新对象。不可饶恕之错。。。。。。
第三个错误,不应该使用BufferedOutputStream 。
最后,附上修改后的代码。
- import java.io.*;
- //列出制定目录下的隐藏文件和文件夹列表,
- class showDirDemo
- {
- public static void main(String[] args) throws IOException
- {
- File dir = new File("d:\\");
- BufferedWriter bfw = new BufferedWriter(new FileWriter("c:\\隐藏文件列表.txt"));
- showDir(dir,bfw);
- if(bfw!=null){
- try{
- bfw.close();
- }catch(IOException ex){
- ex.printStackTrace();
- }
- }
-
- }
- public static void showDir(File dir,BufferedWriter bfw){
- File[] files = dir.listFiles();//列出指定目录下文件和文件夹,存入到File数组
- if(files!=null){
- for(File file : files){//循环目录
- if(file.isDirectory()){//判断是否是文件夹
- showDir(file,bfw);//如果是文件夹,继续循环判断
- }else{
- if(file.isHidden()){//判断是否是隐藏文件
- try{
- System.out.println(file.isHidden());
- System.out.println(file.toString());
- bfw.write(file.toString());//将隐藏文件地址写入文件中
- bfw.newLine();
- bfw.flush();
- }
- catch(IOException e){
- System.out.println("文件写入失败!");
- }
- }
- }
-
- }
- }
- }
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |