gpt4 book ai didi

Java-加载资源目录

转载 作者:行者123 更新时间:2023-12-02 08:19:58 26 4
gpt4 key购买 nike

这来自《Core Java 9 for the impressive》一书的第 4 章。

Resources can have subdirectories which can be relative or absolute. For example, MyClass.class.getResourceAsStream("/config/menus.txt") locates config/menus.txt in the directory that contains the root of the package to which MyClass belongs.

这是令人困惑的一行 - “包含 MyClass 所属包的根目录的目录。”有人可以告诉我这一行指的是哪个目录吗?举个例子就好了。

最佳答案

包和文件夹

在普通的 Java 中,应用程序包和给定 jar 文件中包含的文件系统存在一对一的映射,其中根(“/”)映射到 default (unnamed or root) packageMyClass.class.getReourceAsStream() 方法从相对于 MyClass 所在包的路径加载资源,根目录为环境变量 CLASSPATH 所指向的位置 (通常指向你的 jar 的保存位置)。因此,如果 MyClass 实际上是 com.mycompany.myapp.MyClass,那么与该类相关的资源位于 /com/mycompany/myapp/ > 目录。

来源

standard java/maven project中,maven 会将您的 java 代码从 /src/main/java 编译到目标目录中,并将 src/main/resources 下的所有内容复制到相同的目标目录结构中。要在应用程序中查找与类 com.mycompany.myapp.MyClass 相关的资源源文件,您可以在 src/main/resources/com/mycompany/myapp/ 中查找> 文件夹。但是,对于您的具体示例,正如 @user207421 在下面的评论中指出的那样,您的路径以斜杠 (/) 开头。这使得资源的路径是“绝对”的,而不是与您的类“相对”的。您的路径从根目录开始,因此该文件需要位于 jar 中的目录 /config 中。在 standard java/maven project ,该文件将保存在目录 /src/main/resources/config/ 中。

生成的来源

应该提到的是,即使在standard java/maven project中资源文件可能来自 src/main/resources 以外的目录。例如,常见的做法是在 target/generated-sources 目录中生成代码资源,然后编译这些文件并将其复制到生成的 jar 中,并且我'我在一些商店工作过,他们非常关心将源和资源生成到 target 下的单独目录中,因此他们也有 target/generated-resources,尽管对于大多数项目来说,这被认为是对于生成的源来说过度杀伤。在编译时,src/main/resourcestarget/generated-resources 目录都应复制到 jar 文件的根目录中。

普通Java

此外,为了强调我在开始时提出的观点,这只适用于普通 Java;也就是说,Java 遵循教科书的方法,让文件系统中的 .java 文本文件定义类,并将这些类“编译”到由运行时解释器加载的 jar 文件中。从技术上讲,这一切都是不必要的,并且 java 的某些实现看起来与此完全不同。 IBM 过去编写了一个 java 版本,其中类从数据库而不是 jar 文件加载,如果添加运行时编织和类生成,那么事情很快就会与上述“正常”模型相去甚远。

关于Java-加载资源目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60592131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com