关于Java的相对路径和绝对路径

近期在做Java课设遇到了一点问题,上网查找了一下,一下几乎都源于百度,我稍微整理了一下仅供参考
写课设的时候需要用到另一个文件夹里的图片,对于Java的相对路径绝对路径的使用有点搞不懂
查了一下:

classpath: 就是项目中存放.class文件的路径。

this.getClass().getResource("")

得到的是当前类FileTest.class文件的URI目录。不包括自己!
如:file:/Users/mac/Desktop/FleaMarket/out/production/FleaMarket/pages/
2.

this.getClass().getResource("/")

得到的是当前的classpath的绝对URI路径。
如:file:/Users/mac/Desktop/FleaMarket/out/production/FleaMarket/
3.

Thread.currentThrea().getContextClassLoader().getResource("")

得到的也是当前ClassPath的绝对URI路径。
如:file:/Users/mac/Desktop/FleaMarket/out/production/FleaMarket/
4.

this.getClass().getClassLoader().getResource("")

得到的也是当前ClassPath的绝对URI路径。
如:file:/Users/mac/Desktop/FleaMarket/out/production/FleaMarket/ 5.

ClassLoader.getSystemResource("")

得到的也是当前ClassPath的绝对URI路径。
如:file:/Users/mac/Desktop/FleaMarket/out/production/FleaMarket/

当前用户目录

即Java虚拟机的调用目录,即System.getProperty(“user.dir”) 返回的路径。对于一般项目,就是项目的根目录

例如:/Users/mac/Desktop/FleaMarket

注意点:

1.尽量不要使用相对于System.getProperty(“user.dir”)当前用户目录的相对路径。这是一颗定时炸弹,随时可能要你的命。

2.尽量使用URI形式的绝对路径资源。它可以很容易的转变为URI,URL,File对象。

3.尽量使用相对classpath的相对路径。不要使用绝对路径。使用上面ClassLoaderUtil类的public static URL getExtendResource(String relativePath)方法已经能够使用相对于classpath的相对路径定位所有位置的资源。

4.绝对不要使用硬编码的绝对路径。因为,我们完全可以使用ClassLoader类的getResource("")方法得到当前classpath的绝对路径。

使用硬编码的绝对路径是完全没有必要的!它一定会让你死的很难看!程序将无法移植!

如果你一定要指定一个绝对路径,那么使用配置文件,也比硬编码要好得多!

当然,我还是推荐你使用程序得到classpath的绝对路径来拼资源的绝对路径。

这个时候我又搞不懂URI是什么了,一度以为是写错了(对不起我不配做程序员)
来自百度:
1.URL是全球资源定位符的英文所写,您平时上网时在IE浏览器中输入的那个地址就是URL。比方:网易 http://www.163.com就是一个URL。

2.URI是Web上可用的每种资源 - HTML文档、图像、视频片段、程序,由一个通过通用资源标志符(Universal Resource Identifier, 简称"URI")进行定位。
URL的格式由下列三部分组成:
第一部分是协议(或称为服务方式);
第二部分是存有该资源的主机IP地址(有时也包含port号);
第三部分是主机资源的详细地址。

URI一般由三部分组成:
訪问资源的命名机制。
存放资源的主机名。
资源自身的名称。由路径表示。
二、URL和URI差别:
(a)URI是一个相对来说更广泛的概念。URL是URI的一种,
是URI命名机制的一个子集,能够说URI是抽象的,而详细要使用URL来定位资源。
(b)Web上的每一种资源如:图片、文档、视频等,都是由URI定位的。这里所谓的定位指的是web上的资源相对于主机server来说,存放在server上的详细路径。
©URL是internet上用来描写叙述信息资源文件的字符串。用在客户程序和server上,定位客户
端连接server所须要的信息,它不仅定位了这个信息资源,并且定义了怎样找到这个资源。
通俗理解 :
URI就是一种资源定位机制。它是比較笼统地定位了资源,并不局限于client和server,
而URL就定位了网上的一切资源,仅仅要是网上的资源,都有唯一的URL.
在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema必须被指定。

出处:

博客园 天落恒星 .关于Java相对路径绝对路径
博客园 崇州周柏豪 .关于URI和URL

猜你喜欢

转载自blog.csdn.net/cyl233333/article/details/105080714