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