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