Поведение между Runnable .jar и Eclipse run очень разное

1

Я использую XML-документ в качестве шаблона для нескольких похожих документов (ежемесячные отчеты, которые организованы одинаково). Я пытался найти наиболее общий путь к файлу. Я придумал:

File f1 = new File("src/Statements/TemplateStatement.xml");

где /Statements/ - это папка под вкладкой src в Eclipse, как если бы это был просто другой пакет.

Затем:

File TemplateStatement = new File(f1.getAbsolutePath());
if (TemplateStatement.exists()) {
    // ...do some stuff
} else {
    JOptionPane.showMessageDialog(null, null,
            "ERROR: Transaction template not found.", JOptionPane.OK_CANCEL_OPTION);

    System.exit(0);
}

При работе с Eclipse он отлично работает, и мои вещи делаются. Когда я работаю как .jar на своем рабочем столе (той же машине и файловой системе), я каждый раз нажимаю предложение else. Я подозреваю, что мне не хватает очень простого, но важного свойства того, как банки упаковывают рабочую область и запускают ее (так как в ней больше нет каталога src связанного с ней?).

Мне не повезло найти примеры или объяснения того, как найти файлы путей, доступа, чтения, записи, копирования и т.д. Из jarred-приложений. Я действительно хочу избежать жесткого кодирования полного пути, так как это может быть, если код будет работать на разных машинах. Любые предложения или указатели будут оценены.

  • 0
    Добро пожаловать в StackOverflow, Beircheart. Как вы создали свой jar файл? Вы уже смотрели на этот связанный вопрос ? В нем объясняется, как экспортировать проект eclipse в виде файла jar и как включить другие компоненты.
  • 0
    Объекты в банке не являются файлами и не могут быть доступны с помощью File . Используйте Class.getResource для доступа к jar-объектам.
Теги:
jar
file-io

1 ответ

0

Я только что столкнулся с аналогичной проблемой, и это было вызвано функцией java.io.FileReader, которая использует кодировку по умолчанию для платформы.

Что касается моей ситуации, то в Runnable.jar java.io.FileReader использует ISO-8859-1 кодировку, в то время как в Eclipse используется кодировка UTF-8. Замена

new FileReader(filepath)

с

new InputStreamReader(new FileInputStream(filepath),  "UTF-8")

решает мою проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню