java .io.IOException: Поток закрыт доступ к файлам конфигурации за пределами папок JAR - PullRequest
0 голосов
/ 18 марта 2020

Я выполняю файл jar, который читает конфиги из файла конфигурации вне / home / user / xxx / testFolder / jarfile , путь к файлу конфигурации / opt / xxx / conf / global_config.cfg.

Однако я могу получить доступ к файлам внутри фляги, поэтому я предполагаю, что ошибка связана с тем, что файл не найден.

Ниже мой код:

public Properties createProperties(){
    Properties p = null;
    ClassLoader cl = this.getClass().getClassLoader();
    try (InputStream stream = cl.getResourceAsStream("/opt/xxx/conf/global_config.cfg")) {
        p = new Properties();
        BufferedInputStream bis = new BufferedInputStream(stream);
        p.load(bis); // this is throwing the error
        System.out.println(p.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }

    return p;
}

Как правильно получить файл независимо от его пути в системе Linux?

1 Ответ

1 голос
/ 18 марта 2020
cl.getResourceAsStream("/opt/xxx/conf/global_config.cfg") 

ожидает, что ресурс будет доступен относительно местоположения класса. Таким образом, он будет искать как относительный путь к классу внутри JAR. Но путь /opt/xxx/conf/global_config.cfg - это абсолютный путь к диску, и для его чтения необходимо использовать FileInputStream

public Properties createProperties(){
    Properties p = null;
    ClassLoader cl = this.getClass().getClassLoader();
    try (InputStream stream =new FileInputStream("/opt/xxx/conf/global_config.cfg")) {
        p = new Properties();
        p.load(stream);
        System.out.println(p.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }

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