标准/统一的方式来定位JAR文件内外的文件?

时间:2015-07-17 00:42:21

标签: java jar file-access

查找并随后访问JAR文件内外文件的统一或标准方法是什么。

我在JAR文件中定义了包含配置文本文件的InJarClass()。 然后我在我的主机项目中扩展了这个具有更多配置的类。

假设我在JAR内部:

GFP_MOVABLE|GFP_HIGHUSER

然后在主持人项目中我做了:

config/default.conf

还有:

class MyClass extends InJarClass { .... }

然后我运行这样的事情:

XENV = test java myclass

整个配置过程发生在InJarClass()内部,基于环境XENV。 如您所见,InJarClass()必须同时访问:

config/test.conf

所以重复我的问题是,如果目录结构相互镜像,那么就有统一的访问方式。

1 个答案:

答案 0 :(得分:1)

如果将当前目录和.jar文件放在类路径中:

XENV=test java -classpath .:myjarfile.jar MyClass

你可以这样做:

String configFile =
    "/config/" +
    System.getenv().getOrDefault("XENV", "default") +
    ".conf";

InputStream config = MyClass.class.getResourceAsStream(configFile);

if (config == null) {
    throw new FileNotFoundException(
        "Cannot locate " + configFile + " in classpath");
}

这是有效的,因为应用程序资源是Java在类路径中的每个位置内搜索的资源。因此getResourceAsStream将首先搜索相对于第一个类路径位置.的请求路径。如果找不到具有该名称的文件,它将查看第二个类路径位置myjarfile.jar,并看到它是.jar文件,将在中搜索所请求的文件那个.jar。