Компилирую проект в jar-файл. Запускаю. В нем есть кнопка, сохраняющая переменные в файл, который создается в той же папке, что и сам jar-файл. Но когда я пытаюсь произвести чтение из этого файла, ничего не срабатывает. Вот начало кода чтения из файла:
public void loadAll(ActionEvent actionEvent) throws UnsupportedEncodingException {
String path = Main.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String decodedPath = URLDecoder.decode(path, "UTF-8");
try(FileReader reader = new FileReader(decodedPath+"/save.txt"))
{ //...
т.к. прописав обычный путь файл, jar не находит этот текстовик, тогда здесь я получил путь jar'a, но все равно не работает. Как дать понять jar'у, что файл находится вместе с ним в той же папке?
При сборке проекта мавеном, обнаружил, что путь, получаемый указанным Вами способом выдает путь вместе с самим джарником:
/patch/to/jar/target/SNAPSHOT.jar
Чтоб корректно получить путь к директории с jar
следует добавить следующие строки:
String patch = GlobalKeyboardExample.class.getProtectionDomain().getCodeSource().getLocation().getPath();
File file = new File(patch);
String jarPath = file.getCanonicalPath().toString();
String jarDir = jarPath.substring( 0, jarPath.lastIndexOf( File.separator ));
javaDir
содержит:
/patch/to/jar/target/
его и используйте в дальнейшей работе (не забьваем про слеш)
String decodedPath = URLDecoder.decode(javadir, "UTF-8");
try(FileReader reader = new FileReader(decodedPath+"save.txt"))
Сделайте как-то так:
File file = new File(new File(MainClass.class.getProtectionDomain().getCodeSource().getLocation().getFile()).getParentFile(), "file.txt");
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Вылетает ошибка на андроиде 7+ и 8+ (6 и ниже - все как надо) при автообновлении приложенияКод: