迭代文件夹内的文件

时间:2014-04-26 19:11:22

标签: java file

我发现这个解决方案可以迭代文件夹中的文件,但它给了我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)

任何建议解决它?

5 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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.

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

答案 2 :(得分:0)

尝试更改您的路径:

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");
        }
    }
}

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

答案 3 :(得分:0)

如果

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 subbested。

答案 4 :(得分:0)

试试这个,

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);
            }
        }

    }
}