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

时间:2015-07-16 21:14:08

标签: java jar

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

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

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

1 个答案:

答案 0 :(得分:1)

在大多数情况下,如何打包应用程序并不能确定它将在何处找到其资源。它会在你告诉它查看的任何目录中查找。如果你指定一个jar文件,使用各种jar文件API(例如java.util.jar.JarFile),那么你的程序将找到它的数据。如果您查看操作系统的文件系统(例如使用java.io.FileInputStream之类的内容),那么它就会找到它的数据。

例外情况是当您使用ClassLoader::getResource搜索类路径以查找指定资源时。因此,例如,如果您的类路径指向单个jar文件,那么将仅在该jar文件中查找资源。请注意,如果您使用自定义ClassLoader实现,则可以搜索其他位置 - URL,非类路径路径/ jar文件等。自定义ClassLoader可以使用基本上任何可能的字节源来查找资源 - 它将依赖于ClassLoader的目的是什么。