java实现文件遍历,以及报空指针的原因

java进行文件遍历

话不多说直接上代码

public static void traverseFolder(String path) {
//这是一个已经封装好了的方法,直接传入对应的地址的参数就行了;
		File file = new File(path);        

		if (file.exists()) {
//首先这个文件是存在的;
			File[] files = file.listFiles();                  

			for (File file2 : files) {                    

				if (file2.isDirectory()) {

					System.out.println("文件夹:" + file2.getAbsolutePath());

					traverseFolder(file2.getAbsolutePath());

				} else {

					System.out.println("文件:" + file2.getAbsolutePath());
//很明显是用了递归的方法;
				}

			}

		} else {

			System.out.println("文件不存在!");

		}

	}

以上代码已经可以用来进行文件的遍历的,但是贪玩的同学可能会发现一个问题:当你用盘符直接作为path的时候,有时候会报空指针异常,这是为什么呢?
有的老师可能会说(我老师就是这样说的),是因为有空文件夹!真的是这样么,我们试试不就知道了,传入一个不是盘符的path,并且在其下建立一个空文件夹,结果没有报错,而且还正确的打印出来了文件名!(不信的小伙伴可以自己试一试),那就明显了,空指针异常肯定不是因为空文件夹而导致的,那是因为什么?
我们可以发现,一般报错的都是盘符当做path的时候,并且跟系统关系不大的盘符也并不会报错,C盘是一定会报错的!
造成这种错误的原因是:当你用一个盘符当做File对象的时候调用listFiles()方法是可以的但是结果是有些盘符下边的一些隐藏文件夹是没有权限访问的,也就是说没有办法判断是不是文件夹!如果非要判断那就只能用“是不是文件“来进行判断,不是文件就是文件夹也就是说不能用isDirectory()是要用isFile()的(但是反之则是不成立的!);
总之,这种错误的原因是因为你权限不够从而得到的是一个null指针,解决办法就是可以用isFile()来判断一下,或者直接了当的判断是不是空指针,但是要清楚,空指针不是文件夹是空的所引起的

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰夫·王盖茨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值