我正在尝试创建一个程序,该程序将转到特定的导演并打印位于其中的文件。
以下是代码:
import java.io.File;
public class FileViewer {
mport java.io.File;
public class FileViewer {
public void Srch(String path)
{
File root=new File(path);
File[] list=root.listFiles();
for(File x:list)
{
if(x.isDirectory())
{
Srch(x.getAbsolutePath());
System.out.println(x.getAbsolutePath());
}
else
{
System.out.println(x.getAbsolutePath());
}}}}
public class Viewer {
public static void main(String[] args) {
FileViewer Srch2=new FileViewer();
Srch2.Srch("Home\\Documents");
}
}
我收到了以下错误
Exception in thread "main" java.lang.NullPointerException
at FileViewer.Srch(FileViewer.java:9)
at Viewer.main(Viewer.java:7)
似乎有什么问题?感谢
答案 0 :(得分:1)
File.listFiles()
如果在对象上使用的不是目录,或者无法访问,则可能会返回null
。我不确定"Home\\Documents"
是否存在,但你应该采取防御措施:
public void Srch(String path) {
File root=new File(path);
if (root.exist() && root.isDirectory()) {
File[] list=root.listFiles();
for(File x:list) {
Srch(x.getAbsolutePath());
System.out.println(x.getAbsolutePath());
}
} else {
System.out.println(x.getAbsolutePath());
}
}
答案 1 :(得分:1)
问题最常发生,因为在Srch
方法中,在检查listFiles
实际上是否是目录之前,您调用root
。正如该方法的javadoc中所述
如果此抽象路径名不表示目录
,则返回null
请确保您也处理此案例。例如
public class FileViewer {
public void Srch(String path){
File root=new File(path);
File[] list=root.listFiles();
if ( list == null ){
return;
}
for(File x:list){
if(x.isDirectory()){
Srch(x.getAbsolutePath());
System.out.println(x.getAbsolutePath());
} else {
System.out.println(x.getAbsolutePath());
}
}
}
}
请注意,NullPointerException
是Java中最简单的调试异常之一。只需将调试器的断点放在stacktrace中指示的行,并检查哪个对象是null
。然后你知道为什么你得到例外,你可以开始修复它。通常情况下归结为:
null
是一个有效的情况,你忘了处理它null
不是一个有效的情况,然后您需要调查该变量如何null
并将其修复为上游下次发帖时的旁注:
答案 2 :(得分:0)
当Java想要使用不存在的东西时,会出现java.lang.NullPointerException。可能是路径错了吗?
答案 3 :(得分:0)
这里:
File[] list=root.listFiles();
方法listFile可以返回" null"。 检查Javadoc:http://docs.oracle.com/javase/6/docs/api/java/io/File.html#listFiles()
那么你对这个null变量做一个foreach,如果给Srch方法的路径名没有表示一个目录,你会得到一个NullPointerException。
if(list!=null)
{
for(File x:list)
{
if(x.isDirectory())
{
Srch(x.getAbsolutePath());
System.out.println(x.getAbsolutePath());
}
else
{
System.out.println(x.getAbsolutePath());
}
}
}
可能是" Home \ Documents"不存在,请尝试使用abslotute路径。