0

我有一个 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。

4

2 回答 2

2

您的 String 变量type可能是null如果它没有进入此 if 语句:

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

所以你很有可能得到NullPointerException.

于 2012-10-19T01:49:50.233 回答
0

名为type的变量为空。

添加一行代码,您可以自己查看:

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

输出将为空。

您的代码中的其他地方存在与您的正则表达式无关的问题。

于 2012-10-19T01:57:48.740 回答