Java JAR: запись в файл - PullRequest
       0

Java JAR: запись в файл

3 голосов
/ 03 апреля 2011

В настоящее время в моем проекте Eclipse у меня есть файл, в который я пишу. Однако я экспортировал свой проект в файл JAR, и запись в этот каталог больше не работает. Я знаю, что должен рассматривать этот файл как ресурс classpath, но как мне это сделать с помощью BufferedWriter?

Ответы [ 3 ]

5 голосов
/ 03 апреля 2011

Вам не нужно рассматривать его как ресурс classpath для записи в файл.Вам нужно будет сделать это только в том случае, если файл был в вашем JAR-файле, но вы не хотите записывать в файл, содержащийся в вашем JAR-файле, не так ли?к файлу, но он, вероятно, будет относиться к рабочему каталогу - каталогу, из которого вы выполняете файл JAR (если вы не используете абсолютный путь).В eclipse настройте рабочий каталог из диалогового окна конфигурации запуска.

1 голос
/ 03 апреля 2011

Вы, вероятно, работаете в Linux. Потому что в Linux, когда вы запускаете приложение из JAR, рабочий каталог устанавливается в вашу домашнюю папку (/ home / yourname /). Когда вы запускаете его из Eclipse, рабочий каталог устанавливается в папку проекта.

Чтобы убедиться, что вы действительно знаете, что файлы, которые вы используете, находятся в папке проекта или в папке, где находится ваш JAR, вы можете использовать этот фрагмент кода, чтобы узнать, где находится JAR, а затем использовать * 1003. * Конструктор для создания ваших файлов:

// Find out where the JAR is:
String path = YourClass.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
path = path.substring(0, path.lastIndexOf('/')+1);
// Create the project-folder-file:
File root = new File(path);

И теперь вы можете создавать все свои файлы так:

File myFile = new File(root, "config.xml");

Конечно, root должно быть в вашей сфере.

0 голосов
/ 03 апреля 2011

Такие ресурсы (при их изменении) лучше всего хранить в подкаталоге user.home. Это воспроизводимый путь, к которому у пользователя должен быть доступ на запись. Вы можете использовать имя пакета основного класса в качестве основы для подкаталога. Е.Г.

our.com.Main -> ${user.home}/our/com/
...