【问题标题】:I need to open a file based on its mime type [duplicate]我需要根据文件的 mime 类型打开一个文件 [重复]
【发布时间】:2010-12-28 14:48:33
【问题描述】:

我有获取 mime 类型的代码。它似乎工作。当我将 mimeType 放在 if 语句中时,我没有得到想要的效果。这是sn-ps。

获取 mime 类型--

MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();
String mimeType = mimeTypesMap.getContentType(file);

现在我只想在 mime 类型为文本时打开一个文件--

if (file.isFile()) {
try {
    if (mimeType == "text/plain") openFile(file);
} catch (IOException e) {
    e.printStackTrace();
        System.err.print("    Cannot process file....\n");
}
}

这不会打开文本文件。关于为什么它不起作用的任何想法? openFile(file) 有效,不是问题。文件是一个文件对象。谢谢。

【问题讨论】:

  • 欢迎来到 SO。您可能需要添加一些标签,指出您正在谈论的语言/技术。
  • 是的,它是 Java。这就是我添加相对标签的原因。
  • 很抱歉没有指定它是 Java 代码。

标签: java types mime


【解决方案1】:

也许 mime 类型只是 text

MIME 类型文件搜索顺序:

MimetypesFileTypeMap 查找 用户系统中的各个地方 用于 MIME 类型的文件条目。什么时候 请求搜索 MIME MimetypesFileTypeMap 中的类型,它 搜索 MIME 类型文件 以下顺序:

  1. 以编程方式将条目添加到 MimetypesFileTypeMap 实例。
  2. 用户主目录中的 .mime.types 文件。
  3. 文件 /lib/mime.types。
  4. 名为 META-INF/mime.types 的文件或资源。
  5. 名为 META-INF/mimetypes.default 的文件或资源(通常 仅在activation.jar中找到 文件)。

找到此文件并找出为 .txt 文件指定的 mime 类型。来源:link

【讨论】:

  • 不太可能。一方面,text 不是 MIME 类型。另一方面,大多数用户的情况是,该列表中的第五项将获胜——这是属于 J2EE 分发的文件,并且与所有 MIME 类型映射一样,text/plain 是与常用的文本文件后缀。
  • 你给出的答案对我一点帮助都没有。我打印出 mimeType 变量并为我单击的所有内容获得了一个 mime 类型。 (我使用 DefaultMutableTreeNode 对象和鼠标侦听器创建了一个树。JTree 代码正在工作。)打印的字符串是文本/纯文本。我可以给你完整的代码,但是它很大,我的问题只是在这个方法上——public void valueChanged(TreeSelectionEvent event)
  • 我覆盖它并且是 JTree 的鼠标侦听器。我创建了一个 JTree,用 DefaultMutableTreeNode 填充它,当我单击一个文本文件时,我想在 TextArea 中打开它。我只想打开文本文件,因此要进行 mime 类型检查。 mime 类型正在正确返回,如果 mime 类型是 text/plain 类型,我只是无法打开我单击的文件。是的,我确实检查它是否是文件而不是目录。我现在是否更清楚地解释了我的困境?感谢您的帮助。
  • 大卫,你看到我上面的回答了吗?您没有正确进行字符串比较。 stackoverflow.com/questions/1937903/…
  • 我不明白你的意思。我不是在测试“文本”,而是在测试“文本/纯文本”,这应该有效,对吧?它没有。我猜由于某种原因我无法进行字符串比较。
【解决方案2】:

您使用== 比较MIME 类型,而不是String#equals()——它是一个字符串,是吗?您可能必须这样做:

if (mimeType.equals("text/plain")) openFile(file);

或者更好:

if ("text/plain".equals(mimeType)) openFile(file);

因为这样可以防止 NPE 妨碍您。

【讨论】:

  • 哇。我是多么愚蠢。我知道这一点。一直在用 Perl 和 JS 编写代码,但我并没有重新思考。感谢您与我澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 2020-12-21
  • 1970-01-01
  • 2014-08-28
  • 2020-04-28
  • 2014-04-04
  • 1970-01-01
相关资源
最近更新 更多