问题
Iam working in a desktop application for windows version using java. In my application there is a requirement to search all .php
i use recursive methods;
and REGEX
my code :
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:\\");
}
}
But i have this exception :
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)
回答1:
src.list()
returns null. It probably happens because you (current user) does not have access rights to the directory. I guess it is about C:\
(the root directory of disk C). This often happens especially on Windows 7.
First try to debug your code using directory where you have access rights. Then fix your code to care about nulls. Then try to run your program as an administrator.
回答2:
Change main like below, for debugging purpose.
public static void main(String[] args)
{
try {
find(".php","C:\\");
} catch (Exception e) {
e.printStackTrace();
}
}
And add a null check in
if (src != null && src.exists() && src.isDirectory())
Edit:
Below works fine for me, (I am using 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();
}
}
}
来源:https://stackoverflow.com/questions/8561143/exception-java-lang-nullpointerexception