【问题标题】:System.getProperty("user.dir") alternativeSystem.getProperty("user.dir") 替代
【发布时间】:2018-11-06 21:46:27
【问题描述】:

我想在我的 Java 应用程序中编写 JSon 文件,它在我的 IDE 中运行良好,但只要我移动目录,系统就无法写入文件。我最终发现了问题:System.getProperty("user.dir") 行返回了错误的路径。

这些文件在开发过程中位于C:\wamp\www\myProject。这是我目前的代码:

String url = System.getProperty("user.dir") + "\\src\\json\\Crc.json";
//Returns "C:\wamp\www\myProject\src\json\Crc.json"

将我的项目移至C:\Users\myUser\Desktop 后:

String url = System.getProperty("user.dir") + "\\src\\json\\Crc.json";
//Returns "C:\Users\myUser\src\json\Crc.json"

我想有一种方法可以随时找到我的项目目录在计算机上的位置。大佬们有解决办法吗?

【问题讨论】:

  • 为什么不将Crc.json 移动到您的resources 文件夹并通过类路径访问文件?
  • System.getProperty("user.dir") 始终返回运行 java 的目录。在我看来,输出与预期的一样。
  • @jahra 等等,我该怎么做?我目前没有资源文件夹,我应该在\src 或生成的\build 中创建它吗?

标签: java path directory


【解决方案1】:

C:\wamp\www\myProject 文件夹只是您硬盘上的一个随机位置。

Java 支持 3 个通用位置来查找资源:

  1. 当前工作目录。这是您的命令提示符所在的位置以及 System.getProperty("user.dir") 返回的内容,但您不能依赖与文件系统中任何创建位置相关的蜜蜂,尤其是与您自己系统上的项目结构无关的蜜蜂。

    只有当你的程序有一个命令行界面并且寻找一些默认的文件名来使用时,你才应该使用它。

  2. 用户主页这是您在调用System.getProperty("user.home") 时得到的。在 Unix 上,这将解析为 $HOME,在 Windows 上解析为 %USERPROFILE%

    这是在运行时更改文件或保存用户特定内容的最佳位置。

  3. 自己的代码位置。使用getClass().getResource("filenameWithoutPath") 访问与您的类相同的包中的资源但通常您将资源放在应用程序根目录中的一个特殊文件夹中并像这样访问它:getClass().getResource("/relative/path/from/src/root/filenameWithoutPath")

    在您的 IDE 中,此特殊文件夹应为 Project/src/main/resources(根据 maven Standard Directory Layout

    这适用于您在创建交付包时更改的一些全局配置。

【讨论】:

  • 感谢您的回答!虽然,有些东西我不太明白:当使用user.home 属性时,它总是返回C:\Users\currentUser,你的意思是我应该将json文件保存在这个文件夹中吗?
  • 我也试过getClass().getResource("/json/Crc.json"),我得到的问题是当我执行我生成的.jar时,出来的路径是\pathOfProject\dist\myProject.jar!\json\Crc.json,我不知道为什么它添加了.jar。路径中的罐子
  • “它总是返回 C:\Users\currentUser,你的意思是我应该将 json 文件保存在这个文件夹中吗?”,是的,如果那是用户特定的文件。
  • "我不知道为什么它会在路径中添加 .jar" 这是因为文件应该在 jar 中。
  • 好的,我现在将 json 文件保存在用户目录中,它工作正常。但是如果我有一个文件夹来存储像myProject\src\img 这样的图像怎么办,我怎么能访问这个文件夹myProject 在计算机上的任何地方?很抱歉用我的初学者问题打扰你,但你真的很有帮助......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
相关资源
最近更新 更多