我有一个 FilenameFilter,它可以过滤除具有 mime 类型文本和所有子类型(或应该以任何方式......)的目录和文件之外的所有内容,但是当我使用 .matches() 函数时,它会引发 NullPointerException。当我查看它时,当正则表达式语法不正确时, .matches() 函数会抛出 NullPointerException 。
FilenameFilter filter = new FilenameFilter()
{
public boolean accept(File dir, String name)
{
File tmp = new File(dir.getAbsolutePath() + "/" + name);
if (tmp.isDirectory())
{
return true;
}
else
{
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(dir.getAbsolutePath() + "/" + name);
if (extension != null)
{
MimeTypeMap mime = MimeTypeMap.getSingleton();
type = mime.getMimeTypeFromExtension(extension);
}
return type.matches("text/.*");
}
}
};
传递了一个没有 mime 的文件,因此它输出 null。这是修复:
FilenameFilter filter = new FilenameFilter()
{
public boolean accept(File dir, String name)
{
File tmp = new File(dir.getAbsolutePath() + "/" + name);
if (tmp.isDirectory())
{
return true;
}
else
{
String type = "";
String extension = MimeTypeMap.getFileExtensionFromUrl(dir.getAbsolutePath() + "/" + name);
if (extension != null)
{
MimeTypeMap mime = MimeTypeMap.getSingleton();
type = mime.getMimeTypeFromExtension(extension);
if (type != null)
{
return type.matches("text/.*");
}
else
{
return false;
}
}
else
{
return false;
}
}
}
};
这是来自 eclipse 的描述: String android.webkit.MimeTypeMap.getMimeTypeFromExtension(String extension)
public String getMimeTypeFromExtension (String extension) 自:API Level 1 返回给定扩展的 MIME 类型。
参数 extension 没有前导 '.' 的文件扩展名
返回给定扩展的 MIME 类型,如果没有,则返回 null。