Java如何访问位于我项目上方目录中的文件

时间:2017-12-13 23:08:23

标签: java image javafx filepath

我已经设法找到了一些类似的主题,但到目前为止还没有完全符合这个问题。我正在创建一个JavaFX应用程序,用户可以在其中添加要在应用程序中显示的图像。这些图像作为文件路径字符串存储在文本文件数据库中。由于.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 个答案:

答案 0 :(得分:0)

因此,利用Getting the Current Working Directory in Java突破您的广告,您可以使用FileInputStream来获取Image。例如

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"))的带点前缀的子文件夹来存储你的应用程序数据