从maven项目中的相对路径读取文件

时间:2017-09-05 10:31:35

标签: java maven file-io path classpath

我的

中有我的java文件
  

/src/main/java/Test.java

我想从

中读取属性文件/ XML文件
  

/src/main/resources/plugin.properties 和/或

     

/src/main/resources/templates/basic_java.xml

当我尝试从Test.java中读取这些文件时(在部署之后),它无法执行此操作并提供错误

  

java.io.FileNotFoundException:/target/plugin.properties(没有这样的文件   或目录)           在java.io.FileInputStream.open0(本机方法)

虽然我可以在 / target / classes 文件夹下找到 plugin.properties basic_java.xml ,但它无法读取这些文件。

我尝试了多种解决方案,包括:

1. getClass().getResource("Test.java");
2. new File(".").getCanonicalPath() + "target//plugin.properties";
3. ((URLClassLoader) Thread.currentThread().getContextClassLoader()).getURLs()
4. ((URLClassLoader) Thread.currentThread().getContextClassLoader()).getResourceAsStream("Test.java")
5. Thread.currentThread().getContextClassLoader().getSystemResources("Test.java");
6. new FileInputStream("src\\main\\resources\\plugin.properties");
7. new FileInputStream("resources\\plugin.properties");
8. new FileInputStream("src\\main\\resources\\plugin.properties");
9. new FileInputStream("\\plugin.properties");
10. new FileInputStream("\\classes\\plugin.properties");

但没有运气。

2 个答案:

答案 0 :(得分:2)

你需要这样的东西:

    InputStream inputStream = getClass().getResourceAsStream("/plugin.properties");
    String content = IOUtils.toString(inputStream);

IOUtils来自apache commons

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
</dependency>

这将打开类路径的输入流。

答案 1 :(得分:0)

你能分享更多信息吗? 从您的错误日志

java.io.FileNotFoundException: /target/plugin.properties (No such file or directory) at java.io.FileInputStream.open0(Native Method)

看起来你正在查看此路径中的文件

  

/target/plugin.properties

(当然,这不存在)。我认为你必须做这样的事情

String pluginPath =System.getProperty("user.dir") + "/src/main/resources/plugin.properties";

在这种情况下,您的程序将在

中搜索文件
  

pluginPath:/YOUR_USER_DIR/src/main/resources/plugin.properties

有关&#34; user.dir&#34;的更多信息Java "user.dir" property - what exactly does it mean?