项目文件系统:
Project
|
-----bin
|
-----.settings
|
-----src
|
-----(default package)
|
-----Main.Java
|
-----neuropol x rg.ttf
我有一个程序可以设置如下字体:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT,
getClass().getResourceAsStream("/neuropol x rg.ttf")));
效果很好。我想要弄清楚的是相对路径是如何工作的。因此,neuropol x rg.ttf
文件位于我的 src
文件夹中,因此为了正常工作,您会认为路径应该是:
...getResourcesAsStream("/src/neuropol x rg.ttf")
但它工作得很好,就像我把它放在帖子顶部一样。据我了解,相对路径根应该是运行代码的位置,在本例中是我的项目文件夹,我通过在创建字体的正下方插入以下行来确认这一点:
System.out.println(System.getProperty("user.dir"));
该行返回项目文件夹。那么为什么它在不将 src 文件夹添加到路径的情况下工作呢?我对相对路径的根在哪里感到困惑吗?
最佳答案
方法getResourceAsStream()
打开资源,而不是文件。资源可以是目录中的文件,也可以是 jar 文件中的条目或 JVM 可以找到资源的任何其他位置。 javadoc 讨论了 JVM 如何执行对指定资源的搜索。
关键点是资源名称是相对于 CLASSPATH 的,而不是相对于当前工作目录的。这就是为什么你不能在路径前加上“/src”前缀,尽管如果你要打开一个文件(例如“new FileInputStream(...)”),你会——但只有当程序从项目源运行时目录(但安装在用户计算机上时则不然)。
关于java - 相对路径说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36269114/