项目档案系统:
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") 不过,就像我把它放在邮件的顶端一样,效果很好。据我所知,相对路径根应该位于代码运行的位置,在本例中,这是my文件夹,我已经通过在创建字体的位置下面插入以下一行来确认该文件夹:
System.out.println(System.getProperty("user.dir"));这一行返回项目文件夹。那么,为什么它在不添加src文件夹的情况下工作呢?我对相对路径的根在哪里感到困惑吗?
发布于 2016-03-28 20:03:57
方法getResourceAsStream()打开的是资源,而不是文件。资源可以是目录中的文件,但也可以是jar文件中的条目,或者JVM可以找到资源的任何其他地方。javadoc讨论JVM如何执行对指定资源的搜索。
关键是资源名称相对于CLASSPATH,而不是当前工作目录。这就是为什么您不能用'/src‘作为路径的前缀,尽管如果要打开一个文件(例如’新的FileInputStream(.)‘) --但是只有当程序从项目源目录运行时(但不是在用户的计算机上安装时)。
发布于 2016-03-28 19:12:37
src只是项目的包结构,在编译时不包含。(Default package)是当您没有包名导致您使用/yourFont.ttf时所发生的事情。例如,如果您有一个包名:
-----src
|
-----yourpackage
|
-----neuropol x rg.ttf
// This will become getResourceAsStream("/yourpackage/neuropol x rg.ttf")
-----src
|
-----yourpackage
|
-----Main.java
|
-----fonts
|
-----neuropol x rg.ttf
// This will become getResourceAsStream("/yourpackage/fonts/neuropol x rg.ttf")https://stackoverflow.com/questions/36269114
复制相似问题