【发布时间】:2015-03-08 14:36:48
【问题描述】:
我正在创建一个 Android 应用,我想列出一个目录中的文件。我通过调用来做到这一点
File[] files = path.listFiles(new CustomFileFilter());
path是一个File对象,通过调用创建
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
当我尝试通过调用获取files 数组的长度时
int length = files.length;
这一行给了我一个NullPointerException,因为files 为空。
我已经通过调用检查了我尝试列出其中文件的path 是否存在
System.out.println("Path exists: " + path.exists());
当我运行应用程序时,它会打印出来
Path exists: true
在 Android Studio 控制台中,所以该目录存在。
我也打印了路径名,就是
/storage/emulated/0/Download
所以path 是一个目录,而不是一个文件。
我不知道为什么我会得到一个NullPointerException,因为path 是一个目录。
编辑:CustomFileFilter 类如下所示:
public class CustomFileFilter implements FileFilter {
// Determine if the file should be accepted
@Override
public boolean accept(File file) {
// If the file isn't a directory
if(file.isDirectory()) {
// Accept it
return true;
} else if(file.getName().endsWith("txt")) {
// Accept it
return true;
}
// Don't accept it
return false;
}
}
【问题讨论】:
-
可能是由于
CustomFileFilter类您没有在 Array 中获得任何文件。使用path.listFiles()方法尝试相同的代码 -
哦,忘记在问题中添加
CustomFileFilter类。 -
显示
path.isDirectory()和path.canRead()的输出。仅仅因为你说它是一个文件并不能使它成为一个文件。 -
在使用
path.listFiles()时仍然显示相同的异常? -
@ρяσѕρєяK 我确实检查了 Javadocs。再读一遍。具体来说,阅读when的描述,它可以返回null。不是当您不匹配目录中的任何文件时。
标签: java android nullpointerexception file-listing