0

ディレクトリとファイル以外のすべてを 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。

4

2 に答える 2

2

あなたの String 変数typenull、この if ステートメントに入らない場合は次のようになります。

  if (extension != null)
  {
     MimeTypeMap mime = MimeTypeMap.getSingleton();
     type = mime.getMimeTypeFromExtension(extension)
  }

したがって、あなたが得る可能性は非常に高いですNullPointerException

于 2012-10-19T01:49:50.233 に答える
0

typeという名前の変数が null です。

コード行を追加すると、これを自分で確認できます。

System.out.println("type: " + type);

出力はヌルになります。

正規表現とは関係のないコードの別の場所に問題があります。

于 2012-10-19T01:57:48.740 に答える