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

这是我项目的结构。

proj ---src ----main ----java ----Main.java ----resources ----res.txt 

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

 File f = new File("res.txt"); System.out.println(f.getAbsolutePath()); 

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

编辑:

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

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

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

图我想添加答案。

您还可以使用:

 InputStream file = ClassLoader.getSystemResourceAsStream("res.txt"); 

尝试

 InputStream IS = Main.class.getResourceAsStream("res.txt"); 

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

从eclipse运行时, res.txt / res.txt在/ reader中从启动eclipse的文件夹中创建。 因此输出。

如果要使代码查看特定文件夹中的文件(存在于类路径中),则应尝试使用getResourceAsStream()方法。

或者,您可以指定文件的绝对路径。