正常的使用正确的文件夹路径录入时是可以的,但是在使用盘符录入时就会出现空指针异常,这是为什么啊?
输入: f:\
报错内容:
Exception in thread "main" java.lang.NullPointerException
at com.heima.lianxi.lianxi7.print(lianxi7.java:41)
at com.heima.lianxi.lianxi7.print(lianxi7.java:46)
at com.heima.lianxi.lianxi7.print(lianxi7.java:46)
at com.heima.lianxi.lianxi7.main(lianxi7.java:15)
代码如下:
package com.heima.lianxi;
import java.io.File;
import java.util.Scanner;
public class lianxi7 {
/**
* 从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名
*/
public static void main(String[] args) {
// 1.创建一个File方法接收用户输入的文件夹路径
File file = getFileName();
// 2.递归方法查找该路径下所有文件夹并输出
print(file);
}
public static File getFileName() {
// 创建Scanner对象
Scanner sc = new Scanner(System.in);
// 因为需要多次输入,使用while循环
while (true) {
System.out.println("请输入地址值");
String line = sc.nextLine();
File file = new File(line);
// 判断是否存在这个文件夹路径,如果存在再判断是否是文件路径,排除以后就是文件夹路径
if (!file.exists()) {
System.out.println("您输入的抵制不存在,请重新输入");
} else if (file.isFile()) {
System.out.println("您输入的是文件地址,请输入文件夹的地址");
} else {
return file;
}
}
}
public static void print(File file) {
// 获取该路径下所有文件和文件夹
File[] listFiles = file.listFiles();
// 遍历判断
for (File f : listFiles) {
// f如果是文件,并且以.java结束就打印,如果是文件夹就递归调用print方法
if (f.isFile() && f.getName().endsWith(".java")) {
System.out.println(f);
} else if (f.isDirectory()) {
print(f); ------------------------------------------报错在这里
}
}
}
}
请大神指教一下
|
|