java - 为什么程序在打印出第一个 java 文件后会抛出 NullPointerException?
问题描述
我已经实现了以下两种方法,它们是用于打印目录的子目录和 .java 文件的程序的一部分。在打印第一个目录和第一个 java 文件后,它会抛出一个NullPointerException
. 我无法弄清楚为什么它不继续打印其余 .java 文件的原因。这两种方法是:
public static void printAllJavaFiles(File directory) {
if ((directory.isDirectory()) || (directory.isFile() && (directory.getName().endsWith(".java"))){
print(directory);
depth++;
File[] subs = directory.listFiles();
assert subs != null;
for (File f : subs)
printAllJavaFiles(f);
depth--;
}
}
private static void print(File directory) {
StringBuilder strb = new StringBuilder();
for (int i = 0; i < depth; i++)
strb.append(" ");
System.out.println((++count)+strb.toString()+directory.getName()+" "+directory.getUsableSpace());
}
1 src 433863356416
2 .idea 433863356416
3 am223xi_assign1 433863356416
4 Area.java 433863356416
Exception in thread "main" java.lang.NullPointerException
at am223xi_assign3.PrintJavaMain.printAllJavaFiles(PrintJavaMain.java:22)
at am223xi_assign3.PrintJavaMain.printAllJavaFiles(PrintJavaMain.java:23)
at am223xi_assign3.PrintJavaMain.printAllJavaFiles(PrintJavaMain.java:23)
at am223xi_assign3.PrintJavaMain.main(PrintJavaMain.java:10)
解决方案
它抛出空指针异常,因为您使用的是 assert subs != null 但在没有 -ea VM 标志的情况下运行程序,因此该行下方抛出空指针异常
for (File f: subs) as subs are null for file objects
如果你使用“-ea”VM 标志运行程序,你最终会得到如下的 AssertionError。
1src 276591165440
2 XXX.java 276591165440
Exception in thread "main" java.lang.AssertionError
因为在断言 subs != null; 之后程序会终止。因为文件对象会失败。
使用 if 而不是 assert - 它将打印文件夹中的所有文件
public static void printAllJavaFiles(File directory) {
if ((directory.isDirectory()) || (directory.isFile() &&
(directory.getName().endsWith(".java")))) {
print(directory);
depth++;
File[] subs = directory.listFiles();
if(subs != null) {
for (File f : subs) {
printAllJavaFiles(f);
}
}
depth--;
}
}
推荐阅读
- wso2 - 在 WSO2 IS 5.10 中关联和链接用户帐户
- r - emmfcn(...) 中的错误:变量“CO2”不在 r 的数据集中
- ios - 有没有办法在不重置添加的最后一个视图的位置的情况下向 Xcode 添加子视图?
- macos - WebRTC 捕获 NSCursor 图像导致内存泄漏
- ios - 我们是否应该继续在 iOS 中明确地将变量捕获为弱变量
- kubernetes - 使用 Prometheus 监控 AKS(Azure Kubernetes 服务)无法发现 Kubelet 组件
- c++ - 无法递归创建 C++ 数组
- dart - Dart 最佳实践,我们应该在参数中提供类型注释吗?
- ruby - 如何在ruby中将数组转换为字符串
- php - 我的组件 CakeEmail 提交后不发送但也不返回错误