不能访问资源路径,只有目标路径
我想访问我的项目“\ 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
,在这里我的项目迪尔斯:
的事情是,即使我的所有文件删除目标/ classes和运行代码时,编译器会将这些文件从“src/main/ressources”复制到“目标/类”中并从那里读取它们。
我想访问我的项目“\ 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.jar
和Serial-0.0.1-SNAPSHOT.jar
;在生成jar文件之前,将它们移除(mvn clean或右键单击>运行AS> Maven clean)。原因是Maven只能为每个Maven模块/项目afaik生成一个jar文件。
您正在看到预期的行为。一个Java程序是编译成成可执行的形式 - 含义,.class文件和资源。当其他用户运行您的程序时,他们将无法访问源代码,因此您的代码不应假定您的源代码树将可用。
简而言之,您的代码是正确的。不要尝试阅读源代码树。如果您希望目标/类包含最新文件,请重建您的项目。
请注意:千万不要使用URL的getPath()方法将URL转换为文件名。有许多字符在URL中是不允许的,为了符合URL规范,这些字符将被“百分比转义”。因此,URL的路径部分不是vaid文件名!将URL转换为文件的唯一正确方法是Paths.get(url.toURI())。但是,甚至不应该尝试将资源转换为文件,因为一旦移动到将程序打包到.jar文件中,资源就不会以普通文件的形式存在,只能作为.jar文件中的条目存在(这实际上只是添加了一些特定于Java的条目的zip文件)。
但我将我的项目导出到jar文件并查看后,ressource文件夹在那里,也是我所有的ressourcesc。我需要的是解决资源路径问题的解决方案。 thx –
如果'Main.class.getResource(“/ 123.txt”)'已经返回一个有效的对象,那有什么问题? – VGR
问题是我不知道如何将目标类导出到我的jar中,或者如何获得“src/main/ressources”作为返回值。 –
thx为伟大的帮助球员 –