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()”