【问题标题】:What is the default working directory for a jar launched from Windows Explorer?从 Windows 资源管理器启动的 jar 的默认工作目录是什么?
【发布时间】:2011-11-18 20:01:05
【问题描述】:

我创建了我的应用程序的 jar 文件,以便用户可以从 Windows 资源管理器运行它。它在自己的工作目录中为某些设置加载一个 JSON 文件(使用路径“.\config.json”)。但是,当我从 Windows 资源管理器中的 jar 文件运行它时,它找不到配置文件,而从命令行运行相同的 jar 是有效的。我假设这是因为资源管理器将工作目录设置为 jar 文件夹以外的内容。它设置成什么? (以及如何找到 jar 自己的文件夹?)

【问题讨论】:

标签: java jar windows-explorer working-directory


【解决方案1】:

为什么不尝试打印出System.getProperty("user.dir"); 并了解应用程序的想法?

user.dir    User's current working directory

使用以下内容获取 PARENT.jar 正在从哪里加载,这听起来像你想要的

import java.io.*;

public class Main
{
    public static void main(final String[] args) throws IOException
    {
        final File file = new File(".");
        System.out.println("file = " + file.getAbsoluteFile().getParent());
    }
}

当我从命令行运行它或从 Windows 资源管理器双击时的输出是:

file = c:\Users\Jarrod Roberson\Projects\SwingJarFinder

【讨论】:

  • 这表示它认为它是从 system32 运行的。
【解决方案2】:

看起来像以下内容的副本:

How to get the path of a running JAR file?

如果你的 jar 文件在你的文件系统中,从这里开始获取当前路径:

ClassLoader.getSystemClassLoader().getResource(".").getPath();

【讨论】:

  • 返回的不是.jar的路径而是资源的路径,需要进一步处理才能得到文件路径。如果类是从文件系统以外的地方加载的,这也不起作用。他想要的文件不在.jar 中,而是在它旁边!
  • 实际上你发布的代码抛出了NullPointerException"." in .getResource()
  • 不,对我有用 我在 Mac OS Lion (JDK 1.6) 和 Windows 7 (JDK 1.7) 上测试了它,没有 NullPointerException 并给了我正确的 jar 文件路径。
  • 在 Windows 7 JDK 1.6 上,当从命令行和资源管理器启动以及从 IntelliJ 内部启动时,它会抛出 NullPointerException
  • 奇怪,您创建 jar 的方式可能有问题?试试我测试过的那个:temp-share.com/show/gFHKd9f6Y
猜你喜欢
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 2011-07-29
  • 2013-03-12
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多