Я использую 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-приложений. Я действительно хочу избежать жесткого кодирования полного пути, так как это может быть, если код будет работать на разных машинах. Любые предложения или указатели будут оценены.
Я только что столкнулся с аналогичной проблемой, и это было вызвано функцией java.io.FileReader, которая использует кодировку по умолчанию для платформы.
Что касается моей ситуации, то в Runnable.jar java.io.FileReader использует ISO-8859-1 кодировку, в то время как в Eclipse используется кодировка UTF-8. Замена
new FileReader(filepath)
с
new InputStreamReader(new FileInputStream(filepath), "UTF-8")
решает мою проблему.
jar
файл? Вы уже смотрели на этот связанный вопрос ? В нем объясняется, как экспортировать проект eclipse в виде файлаjar
и как включить другие компоненты.File
. ИспользуйтеClass.getResource
для доступа к jar-объектам.