当前位置: 代码迷 >> java >> JAR在运行时会在JAR(itselfe)内部还是外部查找资源文件?
  详细解决方案

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

热度:70   发布时间:2023-07-27 09:45:40.0

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东西),那么它将在其中查找其数据。

例外是当您使用ClassLoader::getResource ,它将搜索您的类路径以找到指定的资源。 因此,例如,如果您的类路径指向单个jar文件,则仅在该jar文件中查找资源。 请注意,如果您使用自定义ClassLoader实现,则可以搜索其他位置-URL,非类路径路径/ jarfile等。从本质上讲,自定义ClassLoader可以使用任何可能的字节源来查找资源-这取决于ClassLoader的设计目的。