当前位置: 首页 > 知识库问答 >
问题:

无法访问资源路径,只能访问目标路径

洪浩
2023-03-14

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

System.out.println(Main.class.getResourceAsStream("/123.txt")); // java.io.BufferedInputStream@66cd51c3
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 Dir:

问题是,即使我删除了目标/类中的所有文件并运行代码,编译器也会将文件从“src/main/ressource”复制到“目标/类”中并从那里读取它们。

共有2个答案

宇文德明
2023-03-14

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

简单地说,您的代码是正确的。请勿尝试读取源目录树。如果希望目标/类包含最新文件,请重新生成项目。

提醒一下:不要使用URL的getPath()方法将URL转换为文件名。URL中不允许使用许多字符,为了符合URL规范,这些字符将被“百分比转义”;因此,URL的路径部分不是有效的文件名!将URL转换为文件的唯一正确方法是Paths.get(url.toURI())。但是,您甚至不应该尝试将资源转换为文件,因为一旦您将程序打包到. jar文件中,您的资源将根本不作为常规文件存在,而只作为. jar文件中的条目存在(实际上只是添加了一些Java特定条目的zip文件)。

毛景曜
2023-03-14

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

我想这个问题是由用户@VGR回答的。换言之,我想澄清一下:

  • 您将资源放在/src/main/resources文件夹中,在构建项目时,这些资源将按原样复制到/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:/Users/Raul/workspace/Serial/target/classes/123。txt文件

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

输出:文件:/C:/Users/Raul/workspace/Serial/target/classes/myresources/145。txt文件

但是如果打开生成的jar文件,您将看不到target文件夹,因为该文件是123。txt将位于jar文件和145文件的根目录下。txt将位于文件夹myresources/145下。txt

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

现在回答以下问题:

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

要回答这个问题,您必须查看项目根目录上的pom.xml文件。应该有一个

mvn clean install

jar文件将被创建并复制到文件夹中。

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

jar文件也应该生成并复制到文件夹目标中。

注意:在屏幕截图上有两个jar文件:core-0.0.1-SNAPSHOT。jar和Serial-0.0.1-SNAPSHOT。jar;删除它们(mvn清理或右键单击

 类似资料:
  • 本文向大家介绍Spring boot 默认静态资源路径与手动配置访问路径的方法,包括了Spring boot 默认静态资源路径与手动配置访问路径的方法的使用技巧和注意事项,需要的朋友参考一下 在application.propertis中配置 如果自定义访问路径则需要添加WebConfig配置类 在controller中 在浏览器中访问地址 localhost:8081/index 以上所述是小编

  • 本文向大家介绍浅谈vue项目,访问路径#号的问题,包括了浅谈vue项目,访问路径#号的问题的使用技巧和注意事项,需要的朋友参考一下 刚入手vue,有好多的疑问,目前遇到的是vue项目启动之后,输入http://ip:port,我发现浏览器里面显示的地址栏竟然是http://ip:port/#/,这个”/#/“不知道是什么东西,于是百度查了一下。 原因:对于vue开发的单页面应用,我们在切换不同的页

  • 谢谢大家 我的代码:

  • 问题内容: 我正在运行Mac OS X环境,习惯于使用〜/提供对当前用户目录的访问。 例如,在我的python脚本中,我只是尝试使用 但是想用 尝试运行此文件或目录时出现错误消息。有任何想法吗? 问题答案: 您需要使用 正在当前工作目录中寻找名为“〜”的目录。 还请注意该函数的文档-特别是,您需要正确设置环境变量以确保进行扩展。在大多数情况下,这不会成为问题,但是如果不进行扩展,那可能就是原因。

  • 从Android11开始,拥有READ_EXTERNAL_STORAGE权限的应用程序可以使用直接文件路径和本地库读取设备的媒体文件。这个新功能允许您的应用程序更顺利地与第三方媒体库一起工作。 问题是我无法从获得文件路径,那么我们应该如何读取无法访问/检索的文件路径呢?我不知道有没有办法从获取文件路径? 此外,文件说: null null 但是我不需要所有的文件访问权限,我只希望用户从中选择一个视

  • 虽然web.xml文件在JSP页面运行的过程中并不是必须的,但仍然可以在web.xml文件中配置JSP,以改变JSP页面的访问路径。 配置JSP的方法和配置Servlet的方法类似,只是将<servlet-class>元素替换成了<jsp-file>元素,以便指定JSP文件相对于Web应用程序的目录。如下面的配置将simple.jsp的访问路径配置成了“/jsp/simple.html”: <se