Java 我有一个空指针异常,我';我不确定它在我的代码中的位置
我的代码中存在各种异常问题。该类用于查找计算机上的所有文件夹/子文件夹,并将它们列为ArrayList。它不关心其中的文件。这是代码。请帮忙,我已经为此沮丧了一个星期了Java 我有一个空指针异常,我';我不确定它在我的代码中的位置,java,file,nullpointerexception,filenotfoundexception,file-not-found,Java,File,Nullpointerexception,Filenotfoundexception,File Not Found,我的代码中存在各种异常问题。该类用于查找计算机上的所有文件夹/子文件夹,并将它们列为ArrayList。它不关心其中的文件。这是代码。请帮忙,我已经为此沮丧了一个星期了 import java.io.File; import java.util.ArrayList; public class Detector { private ArrayList<String> paths; public Detector() { File[] roots =
import java.io.File;
import java.util.ArrayList;
public class Detector
{
private ArrayList<String> paths;
public Detector()
{
File[] roots = File.listRoots();
for(File drive : roots)
{
getPaths(drive.listFiles());
}
}
public Detector(String str)
{
File[] bob = new File(str).listFiles();
getPaths(bob);
}
public void getPaths(File[] files)
{
for (File file : files)
{
if(file.isDirectory())
{
paths.add(file.getName());
getPaths(file.listFiles());
}
}
}
public ArrayList<String> getPathList()
{
return paths;
}
public void printPaths()
{
for(String str: this.getPathList())
{
System.out.println(str);
}
}
public static void main(String[] args)
{
Detector tom = new Detector("/F:");
tom.printPaths();
}
}
导入java.io.File;
导入java.util.ArrayList;
公共类检测器
{
私有数组列表路径;
公共探测器()
{
File[]root=File.listRoots();
用于(文件驱动器:根目录)
{
getpath(drive.listFiles());
}
}
公共检测器(字符串str)
{
File[]bob=新文件(str).listFiles();
getpath(bob);
}
公共void getpath(文件[]文件)
{
用于(文件:文件)
{
if(file.isDirectory())
{
add(file.getName());
getpath(file.listFiles());
}
}
}
公共阵列列表getPathList()
{
返回路径;
}
公共无效打印路径()
{
for(字符串str:this.getPathList())
{
系统输出打印项次(str);
}
}
公共静态void main(字符串[]args)
{
检测器tom=新检测器(“/F:”);
tom.printPaths();
}
}
您从未初始化路径:
private ArrayList<String> paths = new ArrayList<String>();
private ArrayList path=new ArrayList();
请注意,我在这里还使用了一个类型参数String
,这是您应该使用的。一般情况下,尽量避免使用。您从未初始化过路径:
private ArrayList<String> paths = new ArrayList<String>();
private ArrayList path=new ArrayList();
请注意,我在这里还使用了一个类型参数String
,这是您应该使用的。一般来说,尽量避免使用。这一行的语法不正确
private ArrayList<String> paths;
私有数组列表路径;
您没有正确初始化arraylist。为了正确初始化它,您必须执行以下操作
private ArrayList<String> paths = new ArrayList<>();
private ArrayList path=new ArrayList();
注意:在Java1.7中,我没有将字符串放在
中作为冗余 此行的语法不正确
private ArrayList<String> paths;
私有数组列表路径;
您没有正确初始化arraylist。为了正确初始化它,您必须执行以下操作
private ArrayList<String> paths = new ArrayList<>();
private ArrayList path=new ArrayList();
注意:在Java1.7中,我没有将字符串放在
中作为冗余 附加备注:
File.listFiles()
可能返回null
,这可能是您的NullPointerException。我们也要这样做:
public void getPaths(File[] files)
{
if (files == null) {
return;
}
Java 7有一个新的类,它附带了一些新类,但值得我们去习惯。另外一点:请注意:
File.listFiles()
可能返回null
,这可能是您的NullPointerException。我们也要这样做:
public void getPaths(File[] files)
{
if (files == null) {
return;
}
Java 7有一个新的类,它附带了一些新的类,但值得习惯。不确定“/F:“
真的应该是有效的,你从来没有初始化过arraylist…不确定”/F:”
真的应该是有效的你从来没有初始化过你的arraylist…想提一下Liskov吗?@Bohemian你是什么意思?:如果遵循最佳实践(而不是具体的实现类型arraylist
),那么路径的类型应该声明为抽象类型列表
)想提到Liskov吗?@Bohemian你是什么意思?:如果遵循最佳实践(而不是具体的实现类型ArrayList
),则应将路径的类型声明为抽象类型List
)