![](/img/trans.png)
[英]How can I list all files and directories in <a> tags with a java web server?
[英]How can i get all the list of directories and files in a drive in java. (All files in C:\)
我正在用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),以便它可以显示该驱动器中的所有文件。
堆栈跟踪:
com.imdbrater.application.JavaFXApplication $ GetfilesThread.getFileNames(JavaFXApplication.java:173)上com.imdbrater.application.JavaFXApplication $ GetfilesThread.getFileNames(JavaFXApplication.java:171)处的线程“ Thread-5”中的异常)的com.imdbrater.application.JavaFXApplication $ GetfilesThread.getFileNames(JavaFXApplication.java:173)的com.imdbrater.application.JavaFXApplication $ GetfilesThread.run(JavaFXApplication.java:167)的java.lang.Thread.run(未知源) )
我注意到您对不同的movieNameFilter()
方法执行了一些调用,这些调用未在您发布的代码段中声明。 当您在返回的对象上调用某些方法时,请确保该方法返回正确的值。
您没有发布NullPointerException发生的位置,因此我将基于您试图执行的操作的简单且可能为null
输出给出答案。 请确保用户输入的驱动器确实存在。 如在API文档中的java.io.File
,
返回值:
一组抽象路径名,表示此抽象路径名表示的目录中的文件和目录。 如果目录为空,则数组为空。 如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。
在这种情况下,如果用户输入的路径不存在,则会得到一个NPE。
解决此问题的最佳方法是首先验证用户输入。 第二步涉及验证listFiles()
调用的输出。
// Get files from the user computer
public void getFileNames(File folder) {
// retrieve file listing
File[] fileList = folder.listFiles();
if (fileList == null) {
// throw an exception, return or do any other error handling here
return;
}
// path is correct
for (final File file : fileList ) {
// etc etc etc
}
}
如果NPE与其他任何错误有关,请发表评论,以便我可以相应地更新我的答案。
注意:请记住,Java中的文件路径以双反斜杠转义,因此您应该以如下方式进行调用。
File rootFolder = new File("C:\\");
getFileNames(rootFolder);
File downloadsFolder = new File("C:\\Users\\Rahul\\Downloads");
getFileNames(downloadsFolder);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.