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

时间:2011-05-16 22:59:20

标签: java maven

这是我项目的结构。

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的目录结构?

5 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:14)

图I我将添加答案。

您也可以使用:

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

答案 2 :(得分:12)

尝试

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

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

这是另一种解决方法:

String str = "target/classes/res.txt";

InputStream is = new FileInputStream(new File(str));

如果您在根文件夹中执行java,并且您的资源将编译到target/classes文件夹中,则可以这样编写代码。