Maven 项目 - 从资源文件夹(项目根目录)外部加载文件

我正在 Netbeans 中使用 Maven 创建一个联系人应用程序。对于程序的操作,我希望用户在文件夹 /avatars 中添加和存储图像(联系人头像),并在侦听器事件上访问它们。我可以从 ProjectRoot/src/main/resources/images 目录中访问图像,但无法访问 ProjectRoot/avatars。注意:我不想将头像存储在资源目录中,因为这些将是用户在程序运行时添加的。


我试过使用 getClass().getResource(avatarPath); 正如在类似问题中所建议的那样,但它没有奏效。我还尝试将“avatars”目录作为它自己的资源目录添加到 POM 中,但这也没有奏效。


使用Maven时如何访问项目根目录中的文件/文件夹?


listviewContacts.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Contact>() {

        @Override

        public void changed(ObservableValue<? extends Contact> observable, Contact oldValue, Contact newValue) {

            String avatar = newValue.getAvatar();

            String avatarPath = null;

            if (avatar.isEmpty()) {

                avatarPath = "/images/" + DEFAULT_AVATAR; // loads from ProjectRoot/src/main/resources/images

            } else {

                avatarPath = "/avatars/" + avatar; // won't load from ProjectRoot/avatars

            }

            try {

                imageviewContact.setImage(new Image(avatarPath));

            } catch (IllegalArgumentException ex) {

                System.err.println("Could not locate " + avatarPath);

            }

        }


    });


紫衣仙女
浏览 292回答 2
2回答

饮歌长啸

你正在混合两种不同的东西。您可以将类路径资源与类一起打包在 jarfile 中,也可以将 java 显式添加到 java 类路径(使用 java -cp 命令行参数)的目录中。可以通过 getClass().getResource 访问。或者,您可以使用 java.io.File 从任意位置加载文件。然后你的“projectRoot”是文件系统中的某个文件夹,你可以硬编码,通过 -DprojectRoot=C:/fun/with/files 配置,或者使用一些相对路径。Maven 与它无关,因为化身“将在程序运行期间由用户添加”。您的用户不会启动您的 IDE,对吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java