繁体   English   中英

遍历文件夹中的文件

[英]iterate on file inside a folder

我发现此解决方案可以迭代文件夹中的文件,但是它给了我nullpointException

import java.io.File;

public class Main {
    public static void main(String[] args) {
    File path = new File("/resources/subFolder"); 
    File [] files = path.listFiles(); -> line of nullPointExpection
    for (int i = 0; i < files.length; i++){
        if (files[i].isFile()){ 
            System.out.println(files[i]);
        }
    }
}
}

该文件夹在eclipse项目中。

project
  -src
  -resources
    -subFolder
      -file1
      -file2

Exception in thread "main" java.lang.NullPointerException
    at Main.main(Main.java:9)

有什么建议解决吗?

NPE是由/resources/subFolder不存在引起的。

问题是领先的//resources/subFolder 这意味着绝对路径,即相对于文件系统根目录的路径。 您应该删除它以使其成为相对路径,即resources/subFolder

一个好主意是在循环之前使用File.exists()

File.listFiles()中的javadoc说:

 * @return  An array of abstract pathnames denoting the files and
 *          directories in the directory denoted by this abstract pathname.
 *          The array will be empty if the directory is empty.  Returns
 *          {@code null} if this abstract pathname does not denote a
 *          directory, or if an I/O error occurs.

因此,我认为目录不存在,最有可能是由于路径中的前面的'/'字符,这基本上意味着它从驱动器的根开始搜索,即使用绝对路径。

尝试从以下位置更改路径:

File path = new File("/resources/subFolder"); 

File path = new File("resources/subFolder"); 

也许

File path = new File("../resources/subFolder"); 

取决于您的配置。

您的代码中带有@Roberto的添加建议,可以在没有任何nullpointerexception的情况下运行

import java.io.File;

public class Main {
    public static void main(String[] args) {
        File path = new File("/home/sander"); 
        if(path.exists()) {
            File [] files = path.listFiles(); 
            for (int i = 0; i < files.length; i++) {
            if (files[i].isFile()){ 
                System.out.println(files[i]);
            }
            }
        } else {
            System.out.println("Path doesn't exist");
        }
    }
}

如果这对您不起作用,则可能是文件权限问题(看起来不太可能)。

如果

File [] files = path.listFiles()

返回NullPointerException这意味着path对象为null 这意味着

File path = new File("/resources/subFolder");

创建null对象Java中的异常情况。 检查行号9是否引用您提供的行。 我猜NullPointerException是由循环引起的

for (int i = 0; i < files.length; i++){

因为您在给定目录中没有文件,或者您的路径不正确,因为Roberto包含了该内容。

尝试这个,

public class Main {
    public static void main(String[] args) throws URISyntaxException {

        java.net.URL dirURL = ClassLoader.getSystemResource("resources");
        File[] filePaths = new File(dirURL.toURI()).listFiles();
        for (File file : filePaths) {
            if (file.isFile()) {
                System.out.println(file);
            }
        }

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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