查找并随后访问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
所以重复我的问题是,如果目录结构相互镜像,那么就有统一的访问方式。
答案 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。