首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相对路径澄清

相对路径澄清
EN

Stack Overflow用户
提问于 2016-03-28 18:58:10
回答 2查看 48关注 0票数 0

项目档案系统:

代码语言:javascript
复制
Project
|
-----bin
|
 -----.settings
|
-----src
     |
     -----(default package)
          |
          -----Main.Java
          |
          -----neuropol x rg.ttf

我有一个设置如下字体的程序:

代码语言:javascript
复制
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT,
        getClass().getResourceAsStream("/neuropol x rg.ttf")));

效果很好。我想弄清楚的是,相对路径是如何工作的。因此,neuropol x rg.ttf文件位于我的src文件夹中,因此,为了工作,您会认为路径应该是:

代码语言:javascript
复制
...getResourcesAsStream("/src/neuropol x rg.ttf") 

不过,就像我把它放在邮件的顶端一样,效果很好。据我所知,相对路径根应该位于代码运行的位置,在本例中,这是my文件夹,我已经通过在创建字体的位置下面插入以下一行来确认该文件夹:

代码语言:javascript
复制
System.out.println(System.getProperty("user.dir"));

这一行返回项目文件夹。那么,为什么它在不添加src文件夹的情况下工作呢?我对相对路径的根在哪里感到困惑吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-28 20:03:57

方法getResourceAsStream()打开的是资源,而不是文件。资源可以是目录中的文件,但也可以是jar文件中的条目,或者JVM可以找到资源的任何其他地方。javadoc讨论JVM如何执行对指定资源的搜索。

关键是资源名称相对于CLASSPATH,而不是当前工作目录。这就是为什么您不能用'/src‘作为路径的前缀,尽管如果要打开一个文件(例如’新的FileInputStream(.)‘) --但是只有当程序从项目源目录运行时(但不是在用户的计算机上安装时)。

票数 3
EN

Stack Overflow用户

发布于 2016-03-28 19:12:37

src只是项目的包结构,在编译时不包含。(Default package)是当您没有包名导致您使用/yourFont.ttf时所发生的事情。例如,如果您有一个包名:

代码语言:javascript
复制
-----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")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36269114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档