ディレクトリとファイル以外のすべてを MIME タイプのテキストとすべてのサブタイプでフィルタリングする FilenameFilter があります (または何らかの方法で...) .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。