Java 如何访问jar中的配置文件?
我正在使用解析和加载平面文件中的数据。这需要加载一个存储平面文件列映射的配置文件 我有一个常量来定义映射文件的位置:Java 如何访问jar中的配置文件?,java,jar,Java,Jar,我正在使用解析和加载平面文件中的数据。这需要加载一个存储平面文件列映射的配置文件 我有一个常量来定义映射文件的位置: private static final String MAPPING_FILE = "src/com/company/config/Maping.pzmap.xml"; 我有一个parse(File dataFile)方法,实际执行解析: private void parse(File dataFile) throws FileNotFoundException, SQLEx
private static final String MAPPING_FILE = "src/com/company/config/Maping.pzmap.xml";
我有一个parse(File dataFile)方法,实际执行解析:
private void parse(File dataFile) throws FileNotFoundException, SQLException {
Parser parser;
log.info("Parsing " + dataFile.getName());
FileReader mappingFileReader = new FileReader(MAPPING_FILE);
FileReader dataFileReader = new FileReader(dataFile);
parser = DefaultParserFactory.getInstance().newFixedLengthParser(mappingFileReader, dataFileReader);
parser.setHandlingShortLines(true);
DataSet dataSet = parser.parse();
//process the data
}
当我把所有东西都装进jar并作为jar运行时,它会在FileReader mappingFileReader=newfilereader(MAPPING_FILE)上爆炸代码>带有FileNotFoundException
。不过,该文件在jar中
我怎么去呢
我已经研究并讨论了如何访问JAR中的文件,他们都建议临时提取文件。但是我不想这样做。如果它在一个罐子里,一般来说,它不是一个文件。您应该使用或类似的方法加载数据。我认为问题就在这里解决了:
如果我没记错的话,getResourceAsStream()的行为可能会有所不同,具体取决于部署的web应用程序的web服务器,例如,我认为在Websphere实例上部署war时可能会出现问题。但我不确定这是否适用于你
但我不确定您是否在试图解决“正确”的问题:如果它是一个配置文件,这意味着是否依赖于数据?不依赖代码(您的jar)?当平面文件更改时,您的配置文件也需要更改,对吗?如果这是真的,那么听起来配置应该更好地存储在其他地方,甚至可以作为参数传递给jar
但也许我还没有完全理解您的问题…使用Apache Commons配置,然后您可以读/写XML、自动更新、在path或jar中查找配置文件,而不会遇到很多麻烦。这应该是“Class.getResourceAsStream()”