问题描述
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);
1楼
在大多数情况下,如何打包应用程序并不能确定在哪里可以找到其资源。
它会在您告诉它要查找的任何目录中查找。如果您通过使用各种jar文件API(例如java.util.jar.JarFile
)指定了jar文件,则程序将在其中查找其数据。
如果查看操作系统的文件系统(例如,使用诸如java.io.FileInputStream
东西),那么它将在其中查找其数据。
例外是当您使用ClassLoader::getResource
,它将搜索您的类路径以找到指定的资源。
因此,例如,如果您的类路径指向单个jar文件,则仅在该jar文件中查找资源。
请注意,如果您使用自定义ClassLoader实现,则可以搜索其他位置-URL,非类路径路径/ jarfile等。从本质上讲,自定义ClassLoader可以使用任何可能的字节源来查找资源-这取决于ClassLoader的设计目的。