编写java程序如下;

//示例程序1

package com.cskaoyan.Day15_HomeWork;

import java.io.File;

/*查找某个目录下的所有文件,但是不包括子文件夹下的文件。

那如何找出一个文件及其所有子文件夹下的所有文件?

使用递归来解决。*/

public class Java_3

{

public static void main(String[] args)

{

getFile("F:\\圣思源", " ");

}

//传入路径和空格 空格用来区分子目录

public static void getFile(String path, String tab)

{

//新建指向path路径的file实例

File file = new File(path);

// 判断文件及文件夹是否存在

if (file.exists())

{

//调用listFile遍历路径下所有的file实例

File[] listFile = file.listFiles();

//遍历并循环输出file实例指向的文件名

for (File file2 : listFile)

{

System.out.println(tab + file2.getName());

//如果此file是文件夹,调用自身,传入当前文件夹的path 加两空格并换行以便区分

if (file2.isDirectory())

{

getFile(file2.getPath(), tab + "\t");

}

}

}

}

}

以上程序在运行时正常输出,但在将遍历的文件目录改为根盘符,比如

getFile("F:", " ");

扫描出一部分文件后出现报错

listfile.txt

小米2A合并MIUI7分区工具箱 V1.1.bat

小米2A合并MIUI7分区工具箱 V1.1.zip

QQMusicCache

Log

DataTransformex

QQMusicAgent

QQMusicService

QQMusicSvr

QQMusic_Setup_1273-12.73.3461.0727

System Volume Information

Exception in thread "main" java.lang.NullPointerException

at com.cskaoyan.Day15_HomeWork.Java_3.getFile(Java_3.java:22)

at com.cskaoyan.Day15_HomeWork.Java_3.getFile(Java_3.java:27)

at com.cskaoyan.Day15_HomeWork.Java_3.main(Java_3.java:10)

放上以前编写的单独扫描目录下文件及文件夹的代码

//示例程序2

public static void main(String[] args)

{

File file = new File("F:");

// 打印对象特性

if (file.exists() && file.isDirectory())

{

File[] listFiles = file.listFiles(); // java.lang.NullPointerException

for (File file2 : listFiles)

{

System.out.println(file2.getName());

}

}

正常输出,并没有报错,于是关注异常信息

java.lang.NullPointerException

于是我进一步在目录下新建一个空文件夹,再次遍历扫描,也没有报错,说明空文件夹并不是其报错野指针异常的原因。

查看此类的api文档,其报错原因如下几种,

当应用程序试图在需要对象的地方使用 null 时,抛出该异常,这种情况包括:

调用 null 对象的实例方法

访问或修改 null 对象的字段

将 null 作为一个数组,获得其长度

将 null 作为一个数组,访问或修改其时间片

将 null 作为 Throwable 值抛出

应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用

关注 System Volume Information文件夹,

System Volume Information”是windows系统文件夹

是隐藏文件

中文名称可以翻译为“系统卷标信息”

这个文件夹里就存储着系统还原的备份信息

System Volume Information 文件夹是一个隐藏的系统文件夹

"系统还原"工具使用该文件夹来存储它的信息和还原点

修改其属性,重新用最初程序遍历文件发现程序运行正常

由此确定错误来自System Volume Information 文件夹的权限问题,修改程序循环调用,问题解决了

public static void getFile(String path, String tab)

{

File file = new File(path);

if (file.exists())

{

File[] listFile = file.listFiles();

//如果listFile接收的实例不为null 才进入循环

if (listFile != null)

{

for (File file2 : listFile)

{

System.out.println(tab + file2.getName());

if (file2.isDirectory())

{

getFile(file2.getPath(), tab + "\t");

}

}

}

}

}

总结问题原因及API中解释结果如下

原因:

遍历到F盘下的System Volume Information目录时,

用户没有访问权限,所以调用listFile方法会返回null

API文档中关于listFile()的描述:

返回抽象路径名数组

这些路径名表示此抽象路径名表示的目录中的文件和目录

如果目录为空,那么数组也将为空

如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null

我不由得又滋生了两个问题(均已测试完成)

1.既然调用listFile方法会返回null,为什么示例程序2中调用file.getName()不会报错?

2.修改完System Volume Information目录权限之后,以可正常访问,示例程序1已正常运行,可为何在输出结果中找不到System Volume Information目录?

若有大神看到,求不吝解惑,谢谢

java file 跨 盘符_File类——遍历盘符根目录查找文件报错 java.lang.NullPointerException...相关推荐

  1. HDFS上传文件报错java.lang.InterruptedException

    使用hdfs上传文件时报错, java.lang.InterruptedExceptionat java.lang.Object.wait(Native Method)at java.lang.Thr ...

  2. java pdfbox 解析报错_pdfbox 读取文件报错 java.io.IOException: Page tree root must be a dictionary...

    pdfbox java.io.IOException: Page tree root must be a dictionary 示例代码 public static void main(String[ ...

  3. java 读取文件 报错 java.io.FileNotFoundException

    一般来说就两个问题: 1 路径写错了 2 对应路径下没有要找的文件 解决方法: 绝大部分情况都是路径写错了... 路径的错误: 1)最好用绝对路径 2)如果是win10的话,看看格式里的反斜杠对不对( ...

  4. Java使用File类生成文件报错:java.io.FileNotFoundException: C:\... (拒绝访问。)

    今天在手写动态代理的时候使用File类创建文件报错:java.io.FileNotFoundException: C:\... (拒绝访问.) public class Test {public st ...

  5. java报错找不到对象,使用Spring源码报错java:找不到类 InstrumentationSavingAgent的问题...

    使用Spring源码,报错java:找不到类 InstrumentationSavingAgent 报错如下: Error:(26, 38) java: 找不到符号 符号: 类 Instrumenta ...

  6. 报错java找不到符号 符号:类xxx位置xxxx

    springboot开发项目 报错报错java找不到符号 符号:类xxx位置xxxx 先maven clean 然后继续报错class path resource [logback-admin.xml ...

  7. java源程序是由类定义_无论Java源程序包含几个类的定义,若该源程序文件以A.java命名,编译后生成的都只有一个名为A的字节码文件...

    无论Java源程序包含几个类的定义,若该源程序文件以A.java命名,编译后生成的都只有一个名为A的字节码文件 答:× 小儿头皮静脉输液时如误注入动脉,局部表现为: 答:呈树枝状苍白 人民群众既是历史 ...

  8. java 报错 定位,问题定位分享(2)spark任务一定几率报错java.lang.NoSuchFieldError: HIVE_MOVE_FILES_THREAD_COUNT...

    用yarn cluster方式提交spark任务时,有时会报错,报错几率是40%,报错如下: 18/03/15 21:50:36 116 ERROR ApplicationMaster91: User ...

  9. Idea运行项目报错:java.lang.OutOfMemoryError: Java heap space 解决方法

    问题描述 使用Idea运行代码量比较多的项目时,会报错:java.lang.OutOfMemoryError: Java heap space 问题处理 这个显而易见是堆内存溢出,首先想到的时tomc ...

最新文章

  1. 大一计算机考试题库window,2016年计算机考试Windows题库及答案
  2. STM32开发 -- 4G模块开发详解(1)
  3. c/c++程序员的技术栈
  4. redis维护问题总结
  5. hibernate访问效率相关
  6. $_FILES[file]['error']
  7. oracle 数据库文件丢失
  8. 吴恩达机器学习笔记-非监督学习
  9. 如何在iPhone、iPad和Mac上查看照片的EXIF数据?
  10. android root su sticky bit
  11. 进销存源码|ERP多仓库管理系统全开源php源码
  12. IPD数字诀(一二三四五六七八九十)
  13. mysql count判断_【MySQL】COUNT
  14. 微信显示服务器吃撑了,虐死单身狗!微信突然上线新功能:狗粮一下吃到撑
  15. 逆置单链表——递归与非递归
  16. 微软最新Windows 10官方正式版ISO镜像v1809原版下载大全(中文/英文/日文/韩文)...
  17. Advanced Zip Password Recovery下载
  18. 读曾鸣的《智能商业》有感
  19. LC117 Populating Next Right Pointers in Each Node II
  20. VUE :class 动态class方法

热门文章

  1. 无限火力是哪个服务器2019,LOL2019无限火力国服上线时间 LOL2019无限火力什么时候开...
  2. uniapp的video标签的使用 little白笔记
  3. Xshell 6和Xftp6下载与安装使用
  4. 从产品经理角度看“子弹短信”
  5. 研究War3编辑器(3):单位的基本操作
  6. 推荐几个炫酷的Python开源项目
  7. Java入门基础:剪刀石头布小游戏,练习if else和while等
  8. 活到现在也已经不矫情了
  9. debezium-mysql 源码集成kafka-connector启动
  10. 我妈问我12306购票时为啥需要图片验证码