繁体   English   中英

我如何在Java驱动器中获取所有目录和文件列表。 (C:\\中的所有文件)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM