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()来判断一下,或者直接了当的判断是不是空指针,但是要清楚,空指针不是文件夹是空的所引起的

发布了4 篇原创文章 · 获赞 14 · 访问量 76

猜你喜欢

转载自blog.csdn.net/weixin_45127611/article/details/103947832