【问题标题】:JAVA always read the directory from where jar is executedJAVA 总是读取执行 jar 的目录
【发布时间】:2012-12-06 16:30:12
【问题描述】:

我有一个小型 Java 应用程序,可以更新指定位置的文件。 该应用程序从 UpdateFiles 文件夹中读取,将此文件夹中的文件移动到相应的文件夹中。该应用程序有效。我想知道的是,如果我希望应用程序始终尝试在与应用程序相同的位置查找 UpdateFiles 文件夹,我应该如何设置路径?例如,如果应用程序是从桌面执行的,我希望它在桌面中查找 UpdateFiles 文件夹,与任何其他位置相同。该应用程序在 windows 和 AIX/linux 环境中运行

谢谢你/亲切的问候

【问题讨论】:

  • 请在“应用程序的位置”下定义您的意思。它是带有 *.jar 和 *.class 文件根目录的文件夹吗?或者是java启动的当前目录?
  • “.JAR”文件的位置。我理解所有用户的意思,但该应用程序将在具有不同目录结构和权限的多个服务器上使用。我将 .jar 应用程序移动到服务器上,执行它,然后再次将其删除。因此,如果我将 jar 放在 /usr/test/ 中,我希望应用程序在 /usr/test/ 文件夹中查找 UpdateFiles 文件夹。如果我将 jar 放在 /usr/test/test2/ 中,我希望它在 /usr/test/test2/ 目录中查找 UpdateFiles 文件夹。这一点我可以解释清楚。我希望这是有道理的
  • 据我了解,您总是假设您的应用程序与起始类一起放置在一个 jar 文件中。你如何开始你的申请?为什么不只使用可以显式指定工作路径的起始参数?例如java -jar myapp.jar -DmyWorkDir=/usr/test2

标签: java path directory


【解决方案1】:

您可以访问包含当前工作目录的系统属性:

String currentDirectory = System.getProperty("user.dir");

【讨论】:

  • 也可以使用默认路径。 “user.home”可能是存储文件的更好地方。
【解决方案2】:

可以确定jar文件的位置,但这与当前工作目录(不指定路径得到的目录)不一样

但是,jar 的位置很少是存储文件的好地方,并且您不希望将已发布的程序与文件混在一起,因为这会使升级您的软件变得更加复杂。

我建议使用用户的主目录System.getProperties("user.home"); 或子目录这不会改变,如果您升级您的软件应该始终是可写的。

【讨论】:

    【解决方案3】:

    您必须从 UpdateFiles 所在的目录启动您的应用程序,如有必要,您可以创建一个 bat 文件(适用于 Windows)并从任何位置运行它

    cd c:\path_to_UpdateFiles java MyApp

    在 Linux 中做类似的事情

    【讨论】:

      猜你喜欢
      • 2018-12-09
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 2023-03-05
      • 2014-08-09
      相关资源
      最近更新 更多