Maven exec:java:如何打开和读取资源目录中的文件?

wei*_*wei 18 java maven

这是我项目的结构.

proj
  ---src
    ----main
        ----java
            ----Main.java
        ----resources
             ----res.txt
Run Code Online (Sandbox Code Playgroud)

我在Eclipse中使用m2eclipse插件.在Main.java中,我有

File f = new File("res.txt");  System.out.println(f.getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)

当我运行mvn exec:java时,打印出的路径是"...\proj\res.txt".如何在"...\proj\target\classes"目录中查找资源文件?

编辑:

谢谢你原来的问题的答案.我有一个后续问题:

基本上我想做的是让Main类读取"res.txt"然后生成一个新的"newres.txt"到资源目录,这样我就可以将这个新的"newres.txt"打包到jar文件中在包装阶段之后.目前我将这个exec:java挂载到prepare-package阶段.如何在资源目录中创建这个"newres.txt"而没有硬编码的绝对路径或者取决于Maven的目录结构?

wei*_*wei 20

我想我会回答我自己的问题,Thread.currentThread().getContextClassLoader().getResourceAsStream() 对我来说效果最好,特别是当项目为另一个Web项目产生一个jar依赖项时.


Cug*_*uga 14

图我想添加答案.

您还可以使用:

InputStream file = ClassLoader.getSystemResourceAsStream("res.txt");
Run Code Online (Sandbox Code Playgroud)


Jér*_*nge 12

尝试

InputStream IS = Main.class.getResourceAsStream("res.txt");
Run Code Online (Sandbox Code Playgroud)

访问的内容res.txt.注意文本文件的编码(注意默认值).例如,如果您的maven项目设置为UTF-8,请确保res.txt以UTF-8编码,否则,您将在运行时遇到有趣的错误.