【问题标题】:Converting Java URL to valid File path in Linux在 Linux 中将 Java URL 转换为有效的文件路径
【发布时间】:2011-11-24 21:36:26
【问题描述】:

好的,我正在使用 Eclipse 在 Linux 中开发一个需要读取文本文件的程序。这个想法是将 JAR 和文本文件放在同一个文件夹中。所以我得到这样的文本文件路径:

Client.class.getClassLoader().getResource("Client.class");

这会正确返回路径,我附加文件名并获取以下路径:

/home/marquinio/workspace/my_project/info.txt

问题是当我将项目导出到可执行 JAR 文件时。 JAR 无法读取文件。我仔细检查过,一切看起来都很好。我看到的唯一问题是,现在路径的开头附加了一些“文件:”,如下所示:

file:/home/marquinio/workspace/my_project/info.txt

这可能是我收到“FileNotFoundException”的原因。 JAR 和文本文件都在同一个文件夹中。

有人知道如何解决这个问题吗?为什么 Java 在 Eclipse 和在命令提示符下执行 JAR 之间的行为会有所不同? 如果没有“file:”,是否可以替代 Java 提供的“...getResource(...)”?

注意:这个 JAR 也应该在 Windows 环境中兼容。还需要测试一下。

提前致谢。

【问题讨论】:

  • 一种可能性:在调用作为文本文件路径的 jar 时传入命令行参数。
  • "needs to read a text file" 如果不需要写入到文本文件,把它放到Jar中,获取使用getResource(String) 的网址。该 URL 不能用于 Desktop.open(File),但有 Desktop.browse(URI) 和许多其他方式,只需几行代码即可显示文本文件。
  • 糟糕!我刚刚意识到Desktop.browse(URI) 会因为 Jar 中的资源而失败。我真傻。不过,除其他方式外,还有JEditorPane.setPage(URL)。将 JEP 放入 JScrollPane,为其设置合理的首选大小并使用 JOptionPane 显示它。大约 5-10 行代码。这是short example

标签: java linux eclipse file ubuntu


【解决方案1】:

您所引用的资源不保证是文件系统上的文件。为什么不使用ClassLoader#getResourceAsStream()?在不查看细节的情况下,我最好的猜测是您看到的不同行为是因为在上述每种情况下使用了不同的类加载器。

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2010-09-06
    • 2016-07-26
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    相关资源
    最近更新 更多