Как я могу получить доступ к файлу конфигурации внутри банки? - PullRequest
7 голосов
/ 03 июня 2009

Я использую 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
}

Когда я все собираю и запускаю как банку - он бомбардирует FileReader mappingFileReader = new FileReader(MAPPING_FILE); с FileNotFoundException. Этот файл находится внутри банки.

Как мне добраться до него?

Я рассмотрел этот вопрос и этот вопрос о доступе к файлам внутри jar-файлов, и они оба рекомендуют временно извлечь файл. Я не хочу этого делать.

Ответы [ 4 ]

15 голосов
/ 03 июня 2009

если это внутри JAR, это вообще не файл. Вы должны загрузить данные, используя Class.getResourceAsStream(String) или что-то подобное.

2 голосов
/ 03 июня 2009
1 голос
/ 03 июня 2009

Если я правильно помню, getResourceAsStream () может вести себя по-разному в зависимости от того, на каком веб-сервере развернуто ваше веб-приложение, например, я думаю, что это может быть проблемой при развертывании как война на экземпляре Websphere. Но я не уверен, относится ли это к вам.

Но я не уверен, что вы пытаетесь решить «правильную» проблему: если это файл конфигурации, это означает, что данные зависят, верно? Не зависит от кода (ваша банка)? Когда плоский файл изменится, ваш конфигурационный файл также должен будет измениться, верно? Если это так, похоже, что конфигурацию лучше хранить в другом месте или даже передавать в качестве параметра в jar.

Но, может быть, я не до конца понял вашу проблему ...

0 голосов
/ 03 июня 2009

Используйте конфигурацию Apache Commons, тогда вы можете читать / писать XML, автоматически обновлять, находить конфигурационный файл по пути или jar, без особых хлопот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...