【问题标题】:How to read in file with relative path in Java? [duplicate]如何在Java中读取具有相对路径的文件? [复制]
【发布时间】:2016-11-26 12:00:50
【问题描述】:

我有一个文件users.txt,文件路径为myPlugin/impl/src/main/resources/myPlugin/impl/src/main/java/com/company/myPlugin/impl/users.txt。我正在尝试从文件路径为myPlugin/impl/src/main/java/com/company/myPlugin/impl/UserManager 的Java 类访问此文件。我不想硬编码路径,因为工作目录会改变。我确实尝试过:

String path = System.getProperty("user.dir") + .....path to users.txt;

这个问题是它只在我本地运行插件时才有效。当它部署在另一台机器或服务器上时,工作目录不会包含所有文件。我真正需要的是一种仅使用来自myPlugin 的相对路径来打开文件的方法。我也试过了

URL path = getClass.getResource("");

然后添加路径的其余部分,但这也不起作用。甚至可以只使用不依赖于当前工作目录的相对路径吗?当我在服务器上运行我的插件时,工作目录不包含源代码或目录结构。

【问题讨论】:

  • 你会用maven构建你的应用吗,能确认一下是不是web应用吗?
  • 我确实使用 maven,但它不是 Web 应用程序。

标签: java file


【解决方案1】:

文件位置由两部分组成:myPlugin/impl/src/main/resources/users.txt。第一个是构建系统 (Maven) 找到您的资源的位置。第二个是你的实际资源。

myPlugin/impl/src/main/resources(包括文件和目录)的所有内容都将复制到您的类路径中。

要回答您的问题,您的文件应该可以通过

访问
getClass().getClassLoader().getResource("users.txt");

【讨论】:

  • 一个小观察:这是假设文件在类路径上的位置与调用 getClass().getResource() 的位置在同一个包中。如果我看到这个问题,情况并非如此。 getClass().getClassLoader().getResource() 可能是更好的建议。
  • 这在理论上似乎可行,但没有。它生成的路径是“/target/class”目录下的正确路径,但程序找不到该文件。
  • @Gimby 鉴于资源在默认包中,您的更正至关重要。谢谢。
  • 哦,等等-impl 目录是什么?你通常有myPlugin/src/main/resources 可能你需要myPlugin/src/main/resources/impl/users.txt 吗?
  • 我认为(未经测试)getClass.getResource("/users.txt") 也可以工作(从类路径的根目录搜索)。
猜你喜欢
  • 2014-05-23
  • 2013-01-31
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 2013-11-21
  • 1970-01-01
相关资源
最近更新 更多