Получить местоположение, из которого выполняется код Java - PullRequest
3 голосов
/ 21 апреля 2010

У меня есть свинг-Java-приложение, которое сохраняет много данных (например, вы можете подумать об игре и ее сохранении). Эти данные хранятся в файлах, а не в базе данных.

Я бы хотел, чтобы эти файлы находились рядом с установочными файлами (файл .jar) моего приложения. Некоторые пользователи (например, я) используются для удаления папки приложения по умолчанию в ОС, когда она становится большой, и я не хочу, чтобы они теряли их данные таким образом.

Есть идеи, как это легко сделать? Как получить папку с файлом .jar из программы, которая выполняет этот файл .jar? Или как вывести файлы напрямую в какой-то пакет? Как динамически создавать пакеты (папки внутри jar)? Или есть простой способ распространения приложения Java в других форматах, кроме .jar, а затем сохранения сгенерированных данных в установочной (вложенной) папке?

Спасибо за чтение

Ответы [ 4 ]

6 голосов
/ 21 апреля 2010

Я бы хотел оставить эти файлы рядом установочные файлы (файл .jar) моего Приложение. Некоторые пользователи (как я) используется для удаления приложения по умолчанию папка ОС, когда дело доходит до большого и я не хочу, чтобы они потеряли свои данные таким образом.

Это (и концепция многопользовательских систем без доступа на запись в каталоги приложений для обычных учетных записей пользователей) является причиной, по которой пользовательские данные должны храниться в домашнем каталоге пользователя, а не где-либо рядом с папкой установки приложения. 1005 *

5 голосов
/ 21 апреля 2010

код

URL folderURL = ClassLoader.getSystemResource(".");

предоставит URL-адрес для первого местоположения, в котором ищутся ресурсы, такие как файл класса, который вы в данный момент выполняете.

2 голосов
/ 21 апреля 2010

Вот пример:

package jartest;

import java.io.File;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    private static final Pattern JARURL = Pattern.compile("jar:file:(.*)!.*");

    public static void main(String[] args) {
        try {
            URL url = Main.class.getResource("Main.class");
            Matcher matcher = JARURL.matcher(url.toString());
            if (matcher.matches()) {
                File file = new File(matcher.group(1));
                File dir = file.getParentFile();
                System.out.println(dir);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
0 голосов
/ 21 августа 2012

Получить местоположение вашего файла фляги

Сначала создайте папку (скажем, myfolder) и поместите в нее свои файлы

Рассмотрим следующую функцию

public String path()
{
URL url1 = getClass().getResource("");
String ur=url1.toString();
ur=ur.substring(9);
String truepath[]=ur.split("myjar.jar!");
truepath[0]=truepath[0]+"myfolder/";
truepath[0]=truepath[0].replaceAll("%20"," ");
return truepath[0];
}//This method will work on Windows and Linux as well.
//You can alternatively use the following line to get the path of your jar file
//classname.class.getProtectionDomain().getCodeSource().getLocation().getPath();

Предположим, ваш пользователь поместил файл JAR в D: \ Test \ dist

Тогда path () вернет / D: / Test / dist / myfolder /

Теперь вы можете поместить 'myfolder' в папку, в которой находится ваш jar-файл

Таким образом, вы можете получить доступ к своим файлам в моей папке

Шаги для распространения

Загрузите Inno Setup Compiler с http://www.jrsoftware.org/isdl.php и запустите его

Выберите опцию «Создать новый файл сценария с помощью мастера сценариев». Заполните данные вашей заявки

Далее просмотрите файл JAR (выберите опцию «Все файлы» в диалоговом окне «Открыть», чтобы просмотреть файл JAR)

И, конечно, добавьте «myfolder» в раздел «Другие файлы приложения» (Добавить папку)

Следуйте остальным инструкциям

Вы идете.

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