Запись в файл внутри банки - PullRequest
0 голосов
/ 15 января 2012

У меня проблема с записью в файл .xml внутри моего фляги. Когда я использую следующий код внутри своей среды IDE Netbeans, не возникает никаких ошибок, и он просто пишет в файл.

public void saveSettings(){
    Properties prop = new Properties();
    FileOutputStream out;
    try {
        File file = new File(Duct.class.getResource("/Settings.xml").toURI());
        out = new FileOutputStream(file);
        prop.setProperty("LAST_FILE", getLastFile());
        try {
            prop.storeToXML(out,null);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.toString());
        }
        try {
            out.close();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.toString());
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e.toString());
    }
}

Однако, когда я выполняю флягу, я получаю сообщение об ошибке:

IllegalArguementException: uri is not hierachal

Кто-нибудь имеет представление о том, почему он работает, когда я запускаю его в Netbeans, но не работает, когда я выполняю флягу. Также у кого-нибудь есть решение проблемы?

Ответы [ 3 ]

0 голосов
/ 15 января 2012

Добавьте местоположение Settings.xml к classpath.

0 голосов
/ 18 февраля 2013

Я тоже боролся с этим исключением.Но, наконец, нашел решение.

Когда вы используете .toURI (), он возвращает что-то вроде

D:/folderName/folderName/Settings.xml

и, следовательно, вы получаете исключение "URI не является иерархическим"

Чтобы избежать этого вызова, метод getPath () в возвращенном URI возвращает что-то вроде

/D:/folderName/folderName/Settings.xml

, который теперь является иерархическим.

В вашем случае5-я строка в вашем коде должна быть

File file = new File(Duct.class.getResource("/Settings.xml").toURI().getPath());
0 голосов
/ 15 января 2012

Загрузчик классов по умолчанию ожидает, что classpath будет статическим (поэтому он может сильно кэшироваться), поэтому этот подход не будет работать.

Вы можете поместить Settings.xml в файловую систему, если сможете получить подходящийместо, чтобы положить его.Скорее всего, это зависит от поставщика и платформы, но может быть выполнено.

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