【问题标题】:How to make File class use relative paths?如何使 File 类使用相对路径?
【发布时间】:2015-12-25 01:10:08
【问题描述】:

我已经在 java 中从事一个项目有一段时间了。在尝试运行该项目的 .jar 时,我意识到一些可怕的事情:它不再使用相对路径,而是在“C:\Users\Username\...”目录中搜索文件。

我读到你应该使用getClass().getResourceAsStream("...");而不是new File("...");

在很多地方我都使用了new Sprite(new File("sprites\\sprite.png")); 之类的东西,因此需要很长时间才能全部替换。

我希望我可以做点别的事情。 比如,有没有办法改变 File 类的行为?

有什么建议吗?谢谢。

编辑:
我尝试了 Duran Wesley Harris 的想法,即使用.jaruser.dir 属性设置为文件夹的路径,这实际上成功地更改了查找文件的位置。但是程序仍然无法加载文件。我实际上可以将它正在使用的目录复制到文件资源管理器中并以这种方式加载文件,所以我很奇怪为什么它不能在程序中加载它。

注意:这些文件不在.jar 中,它们位于它旁边的同一个文件夹中。此外,该程序在 IDE (IntelliJ Idea) 中完美运行。

【问题讨论】:

  • 不,如果您的资源现在已嵌入,则必须使用 getResource
  • 你可以像这样实现第一个getRealPath("/images");之后创建文件 filePath = new File(realPath);这将花费更少的时间。
  • 使用相对路径。但是,您在 C:\Users\Username\... 某处执行,所以它看起来就是这样。
  • 其实我是在H:\...

标签: java jar filepath


【解决方案1】:

就个人而言,我认为您应该花时间重构代码以使用xx.getResourceAsStream() 方法。

如果您想尝试制作一个 hacky 解决方案,您可以尝试通过命令行使用 System.setProperty()java -Duser.dir="""user.dir" 属性设置为 jar 的根目录。

【讨论】:

  • 是的,其他提到更改 user.dir 属性的帖子说它只会真正影响文件创建,但不会影响 FileOutputStreams 之类的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多