【发布时间】:2015-06-06 09:15:46
【问题描述】:
我正在用 java FX 编写一个 GUI 程序。用户可以选择系统中的任何目录。不幸的是,目录选择器也让用户选择驱动器。 我们可以使用 file.listFiles() 列出目录中的所有文件和文件夹。如果用户选择驱动器会发生什么。 listfiles() 因空指针异常而失败。
有什么方法可以在java中获取驱动器中的文件和目录列表?
//Get files from the user computer
public void getFileNames(File folder) {
for (final File file : folder.listFiles()) {
if (file.isDirectory()) {
getFileNames(file);
} else {
if (FilenameUtils.isExtension(file.getName().toLowerCase(), videoFormatSet)) {
//Don't consider video files less than 100 MB
final Long FileSizeInMB = file.length() / 1048576;
if (FileSizeInMB < 100) {
continue;
}
final String fileName = FilenameUtils.removeExtension(file.getName());
if (!movieNameFilter(fileName).isEmpty()) {
movieFileNameList.add(movieNameFilter(fileName));
} else {
movieFileNameList.add(fileName);
}
}
编辑:
代码让用户选择一个目录(文件夹变量)。 getFileNames() 提取所选目录中的所有电影文件名。当用户选择目录时,代码运行良好。
但是,JavaFx 也允许用户选择驱动器(我正在使用目录选择器)。比如他在系统中选择了c盘(c:)。
文件夹的值 = E:\
当我在第 171 行执行 folder.listFiles() 时发生空指针异常
171: for (final File file : folder.listFiles()) {
我可以通过添加不允许用户选择驱动器的验证来避免这种情况。
但是如果我想让他选择一个驱动器。有什么方法可以获取该驱动器中所有文件的列表?
简单地说,是否可以编写代码让用户提供驱动器(例如:C 或 D),以便它可以显示该驱动器中的所有文件。
堆栈跟踪:
线程“Thread-5”中的异常 java.lang.NullPointerException 在 com.imdbrater.application.JavaFXApplication$GetfilesThread.getFileNames(JavaFXApplication.java:171) 在 com.imdbrater.application.JavaFXApplication$GetfilesThread.getFileNames(JavaFXApplication.java:173) 在 com.imdbrater.application.JavaFXApplication$GetfilesThread.getFileNames(JavaFXApplication.java:173) 在 com.imdbrater.application.JavaFXApplication$GetfilesThread.run(JavaFXApplication.java:167) 在 java.lang.Thread.run(Unknown Source)
【问题讨论】:
-
您是否尝试对其进行调试以查看它获得 NPE 的确切位置?
-
我们可以看到堆栈跟踪吗?哪条线在抛出 NPE?
-
每次程序没有足够的权限来执行目录列表时,您的代码都会引发 NPE。
-
添加了 NPE 的确切原因。 @VGR:是的。我正在使用 java 8。感谢您的建议。是的,使用 walkfileTree 更有意义。
标签: java