首页 文章

如何访问jar中的配置文件?

提问于
浏览
6

我正在使用FlatPack来解析和加载平面文件中的数据 . 这需要加载存储平面文件列的映射的配置文件 .

我有一个常量来定义映射文件的位置:

private static final String MAPPING_FILE = "src/com/company/config/Maping.pzmap.xml";

我有一个实际解析的解析(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 = new FileReader(MAPPING_FILE); 上用 FileNotFoundException 炸弹 . 那个文件虽然在jar里面 .

我怎么做到的?

我看了this questionthis question关于访问jar中的文件,他们都建议暂时解压缩文件 . 我不想这样做 .

4 回答

  • 0

    一般来说,如果's inside a JAR, it'不是文件 . 您应该使用Class.getResourceAsStream(String)或类似的东西加载数据 .

  • 14

    如果我没记错的话,getResourceAsStream()可能会有不同的行为,具体取决于你的webapp部署的web服务器,例如我认为在Websphere实例上部署为战争时可能会出现问题 . 但我不确定这是否适用于你 .

    但我不确定你是在尝试解决“正确”问题:如果它是一个配置文件,那意味着数据依赖吗?不依赖代码(你的jar)?当平面文件发生变化时,您的配置文件也需要更改,对吧?如果这是真的,听起来配置应该更好地存储在别处,或者甚至作为参数传递给你的jar .

    但也许我还没有完全理解你的问题......

  • 2

    使用Apache Commons Configuration,然后您可以读取/写入XML,自动更新,在路径或jar中查找配置文件,而不会有太多麻烦 .

相关问题