如何编写正确的文件相对路径?Java项目资源路径问题咨询
问题解决:JavaFX ImageView相对路径无效的问题
当然可以用相对路径,问题出在你没搞清楚程序运行时的当前工作目录,或者没有用正确的资源加载方式。
先确认当前工作目录
Java程序里的相对路径是基于运行时的"当前工作目录",不是你的Java源文件所在的src目录。你可以先加一行代码打印当前目录,明确路径基准:
System.out.println(System.getProperty("user.dir"));
- 如果输出是
D:/Visual Studio/New/Test/src,说明程序从src目录启动,需要用../lib/cards/cards/回到项目根目录再进入lib,修改后的代码:ImageView image_0 = new ImageView("../lib/cards/cards/" + Integer.toString(card[0]) + ".png"); - 如果输出是
D:/Visual Studio/New/Test(项目根目录),那你原来的相对路径本应生效,这时候要检查IDE的运行配置,是否误改了工作目录。
更可靠的方案:用类路径加载资源
依赖工作目录的相对路径容易出环境问题,推荐用Java类路径加载资源,这种方式不受工作目录影响:
- 若不想移动资源,把
lib/cards/cards目录添加到项目类路径(在IDE的项目结构设置中操作)。 - 用
getResource方法加载图片:
// 路径开头的斜杠表示从类根目录开始查找 URL imageUrl = getClass().getResource("/lib/cards/cards/" + card[0] + ".png"); if (imageUrl != null) { ImageView image_0 = new ImageView(imageUrl.toExternalForm()); } else { System.err.println("找不到图片:" + card[0] + ".png"); }
另外,标准Java项目会把资源文件放在src/main/resources目录下,你可以把cards/cards文件夹移到这个目录,之后直接用/cards/cards/xxx.png的路径加载,更符合规范且无需额外配置类路径。
内容的提问来源于stack exchange,提问作者Phúc Phan
相关产品推荐
相关产品推荐

