【问题标题】:How get absolute path to <project>\taget folder如何获取 <project>\target 文件夹的绝对路径
【发布时间】:2019-04-14 13:12:00
【问题描述】:

我需要获得&lt;project&gt;/target 文件夹的绝对路径。 我使用以下代码:

Main main = new Main();
String testPath = main.getClass().getResource("").getPath();
System.out.println(testPath);

它返回类似/E:/java/main/target/classes/的路径 但我需要得到/E:/java/main/target/

我应该如何在getResource()中设置一个值?

在我的解决方案中,由于某种原因,我无法使用 System.getProperty("user.dir");

【问题讨论】:

  • 实际上想做什么?如果您将应用程序打包到 JAR 中进行分发,那么您将不再拥有 target 文件夹。
  • 在我给你答案后,你指定你不能使用System.getProperty("user.dir"); 出于“某些”原因。 什么原因?
  • 我会得到路径并将文件放在那里。
  • @Nikolas 解释的原因比较长,这里想问问能不能用另一种方式通过getProperty()获取绝对路径
  • 这是一个 XY 问题。

标签: java classloader filepath


【解决方案1】:

以下行会将您定位到基本目录,srcresourcestarget 文件夹所在的位置:

System.getProperty("user.dir");

它是启动 JVM 的目录,这些属性在 System Properties 中描述。完整的搜索如下所示:

final String targetPath = System.getProperty("user.dir");
final File target = Arrays.stream(new File(targetPath).listFiles(File::isDirectory))
    .filter(file -> "target".equals(file.getName()))
    .findAny()
    .orElseThrow(() -> new FileNotFoundException("The target has not been found"));

【讨论】:

  • 是否可以转义 System.getProperty("user.dir")?
  • @Auser:你为什么需要逃避这个声明?您真正需要什么?
猜你喜欢
  • 2015-09-09
  • 2011-08-30
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 2019-12-17
  • 2012-04-24
相关资源
最近更新 更多