Java, как получить доступ к файлу, сидя в каталоге над моим проектом
Мне удалось найти некоторые темы, похожие на эту, но до сих пор ничто точно не соответствовало этому вопросу. Я делаю приложение JavaFX, где пользователь может добавлять изображения для отображения в приложении. Эти изображения хранятся в виде строк filepath в базе данных текстовых файлов. Поскольку файлы.jar доступны только для чтения, я не могу добавить изображение непосредственно в проект, поэтому я прибег к созданию папки ресурсов, которая находится за пределами проекта, в котором находятся все изображения.
Итак, структура папок:
-> Parent Folder that the .jar file sits in
- Project Folder or .jar file
- src
* classes.java
- assets Folder
* image.jpg
* image2.png
Теперь я знаю, что Image image = new Image(getClass().getResourceAsStream(imagePath));
будет работать, если мой imagePath
находится в папке проекта. Но мне нужен путь относительно (и снаружи) папки.
Мой первый (и на данный момент самый важный) вопрос - как мне указать этот относительный путь, который вообще вырывается из папок приложения?
Во-вторых, это хорошая практика? Если кто-то создает приложение JavaFX и хочет добавить новые изображения, которые будут храниться вместе с приложением, есть ли лучший способ сделать это?
1 ответ
Таким образом, используя Текущий рабочий каталог в Java, чтобы вырваться из фляги, вы можете использовать FileInputStream
чтобы получить ваш Image
s. Например
String cwd = System.getProperty("user.dir");
File dirAboveCws = new File(cwd).getParentFile();
File[] imageFiles = dirAboveCws.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return !pathname.getName().contains("jpg");
}
});
for (File imageFile : imageFiles) {
FileInputStream fileInputStream = new FileInputStream(imageFile);
Image image = ImageIO.read(fileInputStream); // Here is your image
}
Что касается того, является ли это хорошей идеей, то отчасти это отстой, что хранилище ваших изображений зависит от текущего рабочего каталога. IMO, вы должны использовать подпапку с префиксом точки в домашнем каталоге пользователя (System.getProperty("user.home")
) хранить данные вашего приложения