我有一个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级别1 返回给定扩展名的MIME类型。
参数 extension没有前导'。'的文件扩展名
返回 给定扩展名的MIME类型,如果没有,则返回null。
答案 0 :(得分:2)
如果字符串变量type
未输入此if语句,则它可能为null
:
if (extension != null)
{
MimeTypeMap mime = MimeTypeMap.getSingleton();
type = mime.getMimeTypeFromExtension(extension)
}
所以你很有可能获得NullPointerException
。
答案 1 :(得分:0)
名为 type 的变量为空。
添加一行代码,您可以自己看到:
System.out.println("type: " + type);
输出将为null。
您的代码中的其他地方存在与您的正则表达式无关的问题。