java - JAR 在运行时会在 JAR(本身)内部还是外部查找资源文件?

标签 java jar

java程序使用不同的文件,存储在路径“src/main/resources/files/files.drl”下。 如果我将此程序导出为可运行的 JAR 并运行此 JAR,它会在 JAR 内部查找这些文件还是会在文件夹 src->main->resources->files 外部查找?

Java 程序如何使用这些文件的示例代码是:

drlFileName = "./src/main/resources/files/files.drl";
FileInputStream fis = null;
fis = new FileInputStream(drlFileName);
kbuilder.add( ResourceFactory.newInputStreamResource(fis), ResourceType.DRL);   

最佳答案

在大多数情况下,应用程序的打包方式并不能决定它在哪里找到资源。它会在您告诉它查找的任何目录中查找。如果您通过使用各种 jar 文件 API(例如 java.util.jar.JarFile)指定一个 jar 文件,那么这就是您的程序的位置就会找到它的数据。如果您查看操作系统的文件系统(例如使用 java.io.FileInputStream 等),那么它将在其中找到其数据。

异常(exception)情况是当您使用 ClassLoader::getResource 时,它将搜索您的类路径以查找指定的资源。因此,例如,如果您的类路径指向单个 jar 文件,则将仅在该 jar 文件中查找资源。请注意,如果您使用自定义 ClassLoader 实现,则可以搜索其他位置 - URL、非类路径路径/jar 文件等。本质上,自定义 ClassLoader 可以使用任何可能的字节源来查找资源 - 这将取决于类加载器的设计目的是什么。

关于java - JAR 在运行时会在 JAR(本身)内部还是外部查找资源文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31464636/

相关文章:

java - 某些情况下使用Factory或Builder模式是必要的

Java 如何清除kidCache?

Android Gradle 应用程序和库 jar 冲突

使用 JAR 文件中的类的 Java 程序

Java Jar Ant 包含文件夹

java - Jsoup:无法选择 tbody id 中的所有行

java - 启动外部 Activity 以显示 map

java - 应用程序不请求获取权限

hadoop - Hadoop中使用的jar文件重新编译后是否需要停止所有作业

java - 如何从项目内部获取并使用 Apache Ivy.jar 文件,而不将其放在 .ant 文件夹中?