为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

紫衣仙女 2021-06-29 13:49:13
我正在 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);            }        }    });
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

你正在混合两种不同的东西。

您可以将类路径资源与类一起打包在 jarfile 中,也可以将 java 显式添加到 java 类路径(使用 java -cp 命令行参数)的目录中。可以通过 getClass().getResource 访问。

或者,您可以使用 java.io.File 从任意位置加载文件。然后你的“projectRoot”是文件系统中的某个文件夹,你可以硬编码,通过 -DprojectRoot=C:/fun/with/files 配置,或者使用一些相对路径。Maven 与它无关,因为化身“将在程序运行期间由用户添加”。

您的用户不会启动您的 IDE,对吗?


查看完整回答
反对 回复 2021-07-07
  • 2 回答
  • 0 关注
  • 291 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信