【问题标题】:How to get path from URL when running jar - Java运行jar时如何从URL获取路径-Java
【发布时间】:2015-11-06 13:01:01
【问题描述】:

我希望我的代码能够在直接从 jar 运行应用程序时获取文件路径(作为字符串)。这是我的尝试

URL url = LispConnector.class.getResource("/Aima/aima/quicklisp/setup.lisp");
String path = url.getFile();
File f = new File(path);
path = f.getAbsolutePath();
path = path.replace("\\", "/");

虽然当我从 netbeans 运行应用程序时这工作正常,但当我直接运行 jar 文件时返回的绝对路径不正确。返回的路径是

当我使用代码时

String path = url.toURI();
File = new File(path);
path = path.getAbsolutePath();

再次从 netbeans 运行时它工作正常,但在运行 jar 文件时显示错误“URI 不是分层”错误。

我的问题是,直接从 jar 运行应用程序时如何获取文件的绝对路径。 我不想读取文件的内容,我只需要绝对路径作为字符串!

【问题讨论】:

  • 不要尝试使用文件路径访问 JAR 中的资源。由于它们位于 JAR 文件中,因此它们不是文件系统的一部分(因此无法使用文件路径访问)。只需使用 getResourceAsStream(..) 检索 InputStream,然后从 InputStream 中读取数据。
  • 我不想读取数据,我只需要路径作为字符串!
  • 如果你不想读取数据,你想用它做什么?检查是否存在?
  • 没有。这是一个lisp文件,我想通过从java执行lisp函数从lisp命令(加载文件路径)加载它
  • 另外,在我的应用程序中,我想在 UI 上显示文件的路径

标签: java netbeans jar classloader filepath


【解决方案1】:

由于我的项目依赖于这些文件,我决定通过在 build.xml 中添加这些行来将文件夹复制到 dist/ 文件夹

<target name="-post-compile">
<copy todir="${dist.dir}/aima">
<fileset dir="aima/"/>
</copy>
</target>

现在我不需要使用 GetResource() 或 GetResourceAsStream()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2010-09-24
    相关资源
    最近更新 更多