Как получить путь классу java?

245
23 июня 2017, 07:31

Имею некий обучавшийся проект, где использую большое количество пакетов.

Один пакет — это одна особенность языка (например, GUI, IO, Celection, и тд.). В проекте используются внешние ресурсы на ввод и вывод (jpeg, mp3, txt и тд.).

Указываю путь к файлу подобным образом – nameFile = “file.txt”. Выходить что все файлы из разных пакетов выводят файл в корень проекта.

Я хочу, что все выходные файлы выводились в пакет, где лежит класс. Чтобы я мог использовать одно и то же имя, не перезаписывая файл.

Как мне получить относительный путь к классу, чтобы подписать этот путь к ресурсу?

Answer 1

Для получения директории, в которой находится класс, можно использовать такой код:

 File currentClass = new File(URLDecoder.decode(ВашКласс.class
                .getProtectionDomain()
                .getCodeSource()
                .getLocation()
                .getPath(), "UTF-8"));
 String classDirectory = currentClass.getParent();

Лично я использую такую конструкцию с такими классами и распространяю по всему проекту, если проект завязан на работе с файлами:

Интерфейс:

public interface ApplicationPathManager {
    String getApplicationDatabaseDirectory();
    String getApplicationDataDirectory();
    String getApplicationTempDirectory();
    String getApplicationDirectory();
}

Стандартная реализация:

public class DefaultPathManager implements ApplicationPathManager {
    private String mApplicationDatabaseDirectory;
    private String mApplicationDataDirectory;
    private String mApplicationTempDirectory;
    private String mApplicationDirectory;
    public DefaultPathManager(String applicationDirectory) {
        this.mApplicationDirectory = applicationDirectory;
        this.mApplicationDatabaseDirectory = applicationDirectory + File.separatorChar + "database";
        this.mApplicationDataDirectory = applicationDirectory + File.separatorChar + "data";
        this.mApplicationTempDirectory = applicationDirectory + File.separatorChar + "temp";
    }
    @Override
    public String getApplicationDatabaseDirectory() {
        return mApplicationDatabaseDirectory;
    }
    @Override
    public String getApplicationDataDirectory() {
        return mApplicationDataDirectory;
    }
    @Override
    public String getApplicationTempDirectory() {
        return mApplicationTempDirectory;
    }
    @Override
    public String getApplicationDirectory() {
        return mApplicationDirectory;
    }
}

Применение:

        File currentClass = new File(URLDecoder.decode(OSLoaderApplication.class
                .getProtectionDomain()
                .getCodeSource()
                .getLocation()
                .getPath(), "UTF-8"));
        String jarDirectory = currentClass.getParent();
        mApplicationPathManager = new DefaultPathManager(jarDirectory);
Answer 2

Попробуй так

System.out.println(YourClassName.class.getResource("file_name.png").toExternalForm());

                                                        

READ ALSO
SVM класификатор

SVM класификатор

В обшем вот код класификатора но он постоянно выкидивает одни и теже данныеДаже кода я изменяю входные вектора

249
Переназначение аппаратных кнопок android(java)

Переназначение аппаратных кнопок android(java)

Я знаю метод для обработки нажатия кнопки Back, есть ли похожие методы для остальных аппаратных кнопок(меню, центральная кнопка, кнопки громкости,...

244
Динамическое добавление элементов к RecyclerView

Динамическое добавление элементов к RecyclerView

Мне нужно добавлять элементы к RecyclerView при нажатии на кнопку без потери данных, но что-то идет не такВ каждом элементе есть EditText и еще один...

386