2016-10-10 109 views
0

我想访问我的项目“\ src \ main \ resources”的资源形式,但出于任何原因,我只能访问目标类。 这里是我的代码:不能访问资源路径,只有目标路径

System.out.println(Main.class.getResourceAsStream("/123.txt")); // [email protected] 
System.out.println(Main.class.getResource("/123.txt")); // file:/C:/Users/Raul/workspace/Serial/target/classes/123.txt 
System.out.println(Thread.currentThread().getContextClassLoader().getResource("123.txt").getPath()); // /C:/Users/Raul/workspace/Serial/target/classes/123.txt 

,在这里我的项目迪尔斯:

project dirs

的事情是,即使我的所有文件删除目标/ classes和运行代码时,编译器会将这些文件从“src/main/ressources”复制到“目标/类”中并从那里读取它们。

回答

0

我想访问我的项目“\ src \ main \ resources”的资源形式,但出于任何原因我只能访问目标类。

我认为这个问题由用户@VGR回答。只是为了澄清它在另一个词:

  • 你把你的资源在/src/main/resources文件夹,这些resouces将保持原样复制到当你建立你的项目/target/classes文件夹。

src/main/resouces/123.txt -> target/classes/123.txt 
src/main/resources/myresources/145.txt -> target/classes/myresources/145.txt 
... 

现在,如果你运行的程序的IDE里面你会看到如下:

System.out.println(Main.class.getResource("/123.txt")); 

输出:文件:/ C:/用户/ Raul/workspace/Serial/target/classes/123.txt

System.out.println(Main.class.getResource("/myresources/145.txt")); 

输出:file:/ C:/ Users/Raul/workspace/Serial/target/classes/myresources/145。TXT

,如果你打开生成的文件jar你不会看到target文件夹,因为该文件123.txt将在jar文件和文件145.txt根将是该文件夹下myresources/145.txt

文件夹目标只是构建工具的输出目录,不会打包到jar文件中。

我们以下问题:

的问题是,我不知道如何将目标类导出到我的罐子,或者我怎样才能得到“的src/main/ressources”的返回值。

要回答这个问题,您必须查看您的项目根目录中的pom.xml文件。它应该有一个<packaging>jar</packaging>条目。如果是这样,你创建的JAR文件如下:

方案1:通过命令行

mvn clean install 

的jar文件将被创建和复制到文件夹target

选项2:在Eclipse(例如)

right click on the pom.xml > Run AS > Maven install 

jar文件也应该生成并复制到文件夹target

注意:在您的屏幕截图中有两个jar文件:core-0.0.1-SNAPSHOT.jarSerial-0.0.1-SNAPSHOT.jar;在生成jar文件之前,将它们移除(mvn clean或右键单击>运行AS> Maven clean)。原因是Maven只能为每个Maven模块/项目afaik生成一个jar文件。

+0

thx为伟大的帮助球员 –

0

您正在看到预期的行为。一个Java程序是编译成成可执行的形式 - 含义,.class文件和资源。当其他用户运行您的程序时,他们将无法访问源代码,因此您的代码不应假定您的源代码树将可用。

简而言之,您的代码是正确的。不要尝试阅读源代码树。如果您希望目标/类包含最新文件,请重建您的项目。

请注意:千万不要使用URL的getPath()方法将URL转换为文件名。有许多字符在URL中是不允许的,为了符合URL规范,这些字符将被“百分比转义”。因此,URL的路径部分不是vaid文件名!将URL转换为文件的唯一正确方法是Paths.get(url.toURI())。但是,甚至不应该尝试将资源转换为文件,因为一旦移动到将程序打包到.jar文件中,资源就不会以普通文件的形式存在,只能作为.jar文件中的条目存在(这实际上只是添加了一些特定于Java的条目的zip文件)。

+0

但我将我的项目导出到jar文件并查看后,ressource文件夹在那里,也是我所有的ressourcesc。我需要的是解决资源路径问题的解决方案。 thx –

+0

如果'Main.class.getResource(“/ 123.txt”)'已经返回一个有效的对象,那有什么问题? – VGR

+0

问题是我不知道如何将目标类导出到我的jar中,或者如何获得“src/main/ressources”作为返回值。 –