我有一個FilenameFilter過濾除了MIME類型文本和所有子類型的目錄和文件(或者應該以任何方式),但是當我使用。 matches()函數會拋出一個NullPointerException異常。當我研究它時,當正則表達式語法不正確時,.matches()函數會拋出NullPointerException異常。.matches(「text /.*」)throwing 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,因此它輸出爲空。這裏是修復:
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;
}
}
}
};
這裏從蝕的描述: 字符串android.webkit.MimeTypeMap.getMimeTypeFromExtension(字符串擴展)
公共字符串getMimeTypeFromExtension(字符串擴展) 自:API級別1 返回給定擴展的MIME類型。
參數 擴展名沒有前導'。'的文件擴展名。
返回 給定擴展名的MIME類型,如果沒有,則返回null。
我願意打賭_type_爲null。通過添加調試語句很容易確定:_System.out.println(「type:」+ type); _ – jahroy