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чтобы получить ваш Images. Например

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")) хранить данные вашего приложения

Другие вопросы по тегам