我在使用java的Windows版桌面应用程序中工作。在我的应用程序中,需要搜索所有.php
我使用递归方法;
和REGEX
我的代码:
import java.io.File;
public class Copier {
public static void find(String source,String rep)
{
File src=new File(rep);
if(src.exists() && src.isDirectory())
{
String[] tab=src.list();
for(String s:tab)
{
File srcc=new File(rep+"\\"+s);
if(srcc.isFile())
{
if(srcc.getName().matches(".*"+source+"$"))
System.out.println(s);
}
else
find(source,srcc.getAbsolutePath());
}
}
}
public static void main(String[] args)
{
find(".php","C:\\");
}
}
但我有这个例外:
Exception in thread "main" java.lang.NullPointerException
at Copier.find(Copier.java:11)
at Copier.find(Copier.java:21)
at Copier.main(Copier.java:28)
答案 0 :(得分:1)
如下所示更改main,以进行调试。
public static void main(String[] args)
{
try {
find(".php","C:\\");
} catch (Exception e) {
e.printStackTrace();
}
}
并在
中添加空检查if (src != null && src.exists() && src.isDirectory())
编辑:
以下对我来说很好,(我正在使用Windows 7)。
import java.io.File;
public class Copier {
public static void find(String source,String rep) {
File src = new File(rep);
if (src!= null && src.exists() && src.isDirectory()) {
String[] tab = src.list();
if (tab != null) {
for(String s : tab) {
File srcc = new File(rep+"\\"+s);
if (srcc.isFile()) {
if (srcc.getName().matches(".*"+source+"$")) {
System.out.println(s);
}
} else {
find(source,srcc.getAbsolutePath());
}
}
} else {
//System.out.println(" list is null");
}
}
}
public static void main(String[] args) {
try {
find(".java", "C:\\");
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 1 :(得分:1)
src.list()
返回null。可能是因为您(当前用户)没有该目录的访问权限。我想这是关于C:\
(磁盘C的根目录)。这经常发生在Windows 7上。
首先尝试使用具有访问权限的目录来调试代码。然后修复代码以关注空值。然后尝试以管理员身份运行您的程序。