我在Java编程方面没有多少经验,我尝试编写简单的程序,遍历某个目录及其子文件夹并计算txt文件。我使用过这段代码:
import java.io.*;
public class Fajlovi {
public static void main(String[] args) throws Exception {
Fajlovi n=new Fajlovi();
File f=new File("D:\\");
System.out.println("Number of txt files is"+n.listaj(f));
}
public int listaj(File f){
int count=0;
File[] s= f.listFiles();
for(int i=0;i<s.length;i++){
if(s[i].isDirectory())
count+=listaj(s[i]);
else if(s[i].getName().endsWith(".txt")){
count++;
}
}
return count;
}
}
问题是它有时会根据我指定的目录而工作,但通常会抛出NullPointerException
并停止执行。我已经使用了一些命令来执行执行步骤,并且我发现在为某些目录调用count+=listaj(s[i])
时它会停止,我甚至无法在我的计算机上找到它而且它没有隐藏。
答案 0 :(得分:1)
当您的程序试图访问System Files和文件夹下的那些安全目录时,它会抛出NullPointerException。
在s[i].isDirectory()
成为true
的代码中,它开始探索s[i]
目录,并且由于JVM无法访问该安全位置,因此返回null值。
您可以检查目录是否为null,然后只尝试在该目录中查找.txt
文件。
希望这个解释能回答你的问题。
答案 1 :(得分:0)
File.listFiles()
,则返回null。如果发生这种情况,您的循环条件将导致NullPointerException
。如果你最后提到的,那就是调用它是有意义的。
为什么会发生这种情况需要更多信息。什么是[你]在[你的]电脑上找不到的文件?“
答案 2 :(得分:0)
当使用的目录/文件无效时,程序崩溃。
有关 listFiles()的文档:
如果此抽象路径名不表示目录,或者发生I / O错误,则返回{@code null}。
此代码应防止将来出现NullPointerExceptions:
File[] s = f.listFiles();
if (s != null) {
for (int i = 0; i < s.length; i++) {
if (s[i].isDirectory())
count += listaj(s[i]);
else if (s[i].getName().endsWith(".txt")) {
count++;
}
}
return count;
} else {
System.out.println("Invalid directory");
return 0;
}
答案 3 :(得分:0)
这种方法对我有用(在Win 7上运行):
import java.io.*;
public class txtCount
{
public static void main(String[] args)
{
txtCount n=new txtCount();
File f=new File("D:\\");
System.out.println("Number of txt files is " + n.listAndCount(f));
}
public int listAndCount(File f)
{
int count=0;
for (final File fileEntry : f.listFiles())
{
if (fileEntry.isDirectory())
{
count += listAndCount(fileEntry);
}
else if(fileEntry.getName().endsWith(".txt"))
{
count++;
}
}
return count;
}
}