.matches(“text /.*”)抛出NullPointerException

时间:2012-10-19 01:45:42

标签: java nullpointerexception

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

2 个答案:

答案 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。

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

相关问题