Имею некий обучавшийся проект, где использую большое количество пакетов.
Один пакет — это одна особенность языка (например, GUI, IO, Celection, и тд.). В проекте используются внешние ресурсы на ввод и вывод (jpeg, mp3, txt и тд.).
Указываю путь к файлу подобным образом – nameFile = “file.txt”
.
Выходить что все файлы из разных пакетов выводят файл в корень проекта.
Я хочу, что все выходные файлы выводились в пакет, где лежит класс. Чтобы я мог использовать одно и то же имя, не перезаписывая файл.
Как мне получить относительный путь к классу, чтобы подписать этот путь к ресурсу?
Для получения директории, в которой находится класс, можно использовать такой код:
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);
Попробуй так
System.out.println(YourClassName.class.getResource("file_name.png").toExternalForm());
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В обшем вот код класификатора но он постоянно выкидивает одни и теже данныеДаже кода я изменяю входные вектора
Я знаю метод для обработки нажатия кнопки Back, есть ли похожие методы для остальных аппаратных кнопок(меню, центральная кнопка, кнопки громкости,...
Мне нужно добавлять элементы к RecyclerView при нажатии на кнопку без потери данных, но что-то идет не такВ каждом элементе есть EditText и еще один...