2011-05-16 19 views
17

这里是我的项目的结构。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高管:Java中,路径得到打印出来就是 “... \凸出\​​ res.txt”。我怎样才能让它在“... \ proj \ target \ classes”目录下查找资源文件?

编辑:

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

所以基本上我想要做的是让主类读取“res.txt”,然后生成一个新的“newres.txt”资源目录,以便我可以稍后将这个新的“newres.txt”封装到包文件的jar文件中。目前我将这个exec:java加载到prepare-package阶段。我应该如何在资源目录中创建这个“newres.txt”,而不使用硬编码的绝对路径或根据Maven的目录结构?

回答

19

我想我会回答我自己的问题,Thread.currentThread().getContextClassLoader().getResourceAsStream() 最适合我,特别是当项目产生另一个web项目的jar依赖项。

+0

你是最棒的!谢谢 – Angelo 2015-12-10 14:34:46

1

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

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

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

12

尝试

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

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

+0

更多内容在博客中我最近创建:http://tshikatshikaaa.blogspot.nl/2012/07/maven-how-to-access-filesdata- in.html – JVerstry 2012-07-27 13:26:39

+0

有关何时使用前导'/'作为资源路径的信息,请参见http://www.javaworld.com/javaqa/2003-08/01-qa-0808-property.html?page=2。 – leo 2013-07-08 14:29:42

13

图我会添加到答案。

您还可以使用:

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

这解决了我的问题!非常感谢您花时间写这个解决方案! – Wulf 2013-08-27 21:27:35

+0

很高兴帮助! – Cuga 2013-08-28 15:28:47

相关问题