我的目标是获取计算机中所有mp3文件的列表(在c:目录中的代码下面)。但是当我运行此代码时,我得到了NullPointerException
。但适用于其他目录,如(e :)。
public class music {
public static void main(String args[]){
extract("c:\\");
}
public static void extract(String p){
File f=new File(p);
File l[]=f.listFiles();
for(File x:l)
{
//System.out.println(x.getName());
if(x.isHidden()||!x.canRead())
continue;
if(x.isDirectory())
extract(x.getPath());
else if(x.getName().endsWith(".mp3"))
System.out.println(x.getPath()+"\\"+x.getName());
}
}
}
答案 0 :(得分:2)
当我尝试访问某些not real directories like c:\Documents and Settings
时,我的代码获得了NPE。
要解决此问题,您可以跳过迭代从null
返回listFiles()
的目录,如下所示:
public static void main(String args[]) {
extract(new File("c:\\"));
}
public static void extract(File dir) {
File l[] = dir.listFiles();
if (l == null) {
System.out.println("[skipped] " + dir);
return;
}
for (File x : l) {
if (x.isDirectory())
extract(x);
if (x.isHidden() || !x.canRead())
continue;
else if (x.getName().endsWith(".mp3"))
System.out.println(x.getPath());//name should be included in path
}
}
答案 1 :(得分:0)
在Windows操作系统中。 C Drive(Windows驱动器)具有Windows运行时使用的系统文件和Windows锁定的文件。当您的代码尝试通过异常访问该文件时 尝试使用其他C://驱动器运行此代码.. 为此文件添加Try catch或null检查:
import java.io.*;
public class Music {
public static void main(String args[]){
extract("c:\\");
}
public static void extract(String p){
File f=new File(p);
File l[]=f.listFiles();
for(File x:l){
if(x==null) return;
if(x.isHidden()||!x.canRead()) continue;
if(x.isDirectory()) extract(x.getPath());
else if(x.getName().endsWith(".mp3"))
System.out.println(x.getPath()+"\\"+x.getName());
}
}
}