java中的Classpath变量

时间:2010-07-13 12:33:11

标签: java maven-2 jar classpath

我正在阅读我的应用程序中的一些文件并将它们称为new File("src/main/resource/filename")并且它可以正常工作。但是,当我使用Maven程序集插件打包jar并运行java - jar时,我自然会收到错误:

  

发生错误:src\main\resources\UPDATE.txt(系统找不到指定的路径)

因为jar中没有src/main/resources,我如何将src/main/resources称为某种类路径变量,以便应用程序在独立的java和组装的jar中都可以工作?

2 个答案:

答案 0 :(得分:3)

您需要使用Class.getResourceAsStream()方法加载文件

E.g。

InputStream str = getClass().getResourceAsStream("/UPDATE.txt");

或者如果您使用静态方法,则明确指定类

InputStream str = MyApp.class.getResourceAsStream("/UPDATE.txt");

编辑:

使用StreamSource,只需将输入流传递到流源,例如

   new StreamSource(getClass().getResourceAsStream("/UPDATE.txt"));

但请注意,如果资源不存在,getResourceAsStream将返回null,因此您可能希望显式检查并抛出异常。

答案 1 :(得分:2)

src / main / resources是一个开发时间约定,后面是maven项目放置除源代码之外的工件。一旦构建了jar,它们就会被添加到类路径中。所以在你的...场景UPDATE.TXT位于类路径的根目录。

因此,您应该引用类路径中的资源,而不是文件系统中的资源。 http://mindprod.com/jgloss/getresourceasstream.html