Java语言中的路径基础知识(总是忘,记录下)

[b]Java中路径知识[/b]

[b]一、换行符[/b]
换行(\n)就是光标下移一行却不会移到这一行的开头。

[b]二、回车符[/b]
回车(\r)就是回到当前行的开头却不向下移一行。
Enter键按下后会执行\n\r这样就是我们看到的一般意义的回车了,所以你用16进制文件查看方式看一个文本,就会在行尾发现"\r\n"。

[b]三、制表符[/b]
Tab是制表符,就是"\t",作用是预留8个字符的显示宽度,用于对齐。

四、System.getProperties()当前系统属性
1)file.separator
文件分隔符,在Windows系统中是“\”,在UNIX系统中是“/”。
在代码中也可以这样获取:

System.out.println("文件分隔符:"+System.getProperty("file.separator"));
System.out.println("文件分隔符:"+File.separator);


2)path.separator
路径分隔符,在Windows系统中是“;”即分号,在UNIX系统中是“:”即冒号。
在代码中也可以这样获取:

System.out.println("路径分隔符:"+System.getProperty("path.separator"));
System.out.println("路径分隔符:"+File.pathSeparator);


3)line.separator
行分隔符,在Windows系统中是“\r\n”;而在在UNIX系统中是“/n”即换行符。
在代码中也可以这样获取:

System.out.println("行分隔符:"+System.getProperty("line.separator"));


4)user.name
用户的账户名称

5)user.home
用户的主目录

6)user.dir
用户的当前工作目录
在代码中也可以这样获取:

System.out.println(System.getProperty("user.dir"));


[b]五、Class.getResource与ClassLoader.getResource用法与区别[/b]
工程根目录
|-com.cn.test
|-Test.class
|-test2.txt
|-test1.txt

[b]1)利用Class.getResource方法来获取资源的时候,路径写法有两种[/b]

URL url1 = this.getClass().getResource("test2.txt");



//注意这种写法中,路径必须以“/”开头,且从工程根目录开始查找
URL url2 = this.getClass().getResource("/com/cn/test/test2.txt");


当采用this.getClass().getResource("test2.txt")这种写法时,getResource方法会自动的在路径test2.txt的前面加上当前类的包路径,比如:com/cn/test/test2.txt,然后根据此路径来查找资源。

当采用this.getClass().getResource("/com/cn/test/test2.txt")这种写法时,getResource方法会自动的将路径/com/cn/test/test2.txt最前面的“/”去掉,变为com/cn/test/test2.txt后,然后根据此路径进行查找。

也就是说Class.getResource方法要么是根据当前类路径进行查找,要么是一绝对路径方式,从根目录进行查找。

[b]2)利用ClassLoader.getResource方法来获取资源,就没有上面的这么麻烦,只有一种写法。[/b]

//注意这种写法中,路径前面没有“/”
this.getClass().getClassLoader().getResource("test1.txt");

ClassLoader.getResource方法的路径不需要以“/”开头,但是该方法默认从项目根目录开始查找。

[b]这么看来ClassLoader.getResource方法的用法与this.getClass().getResource("/com/cn/test/test2.txt")这种写法其实是一样的。[/b]

为什么呢?我们来看下this.getClass().getResource方法的源码:

public java.net.URL getResource(String name) {
name = resolveName(name);
ClassLoader cl = getClassLoader0();
if (cl==null) {
// A system class.
return ClassLoader.getSystemResource(name);
}
return cl.getResource(name);
}


resolveName方法最主要的工作就是,给以“/”开头的name,去掉“/”。给不是以“/”开头的那么,增加当前类的包路径。比如,当name为/com/cn/test/test2.txt时,经过resolveName方法处理后,就变成了com/cn/test/test2.txt。

而一般的类都是由“系统类加载器”加载的,也就是getClassLoader0()方法得到的ClassLoader cl一般都是空。

这样就导致该方法实际上是通过ClassLoader.getSystemResource(name)方法得到的“系统类加载器”的getResource(name)方法查找的资源,也就是说是通过ClassLoader.getResource("com/cn/test/test2.txt")方法查找的资源。

这样就刚好解释了ClassLoader.getResource("com/cn/test/test2.txt")和this.getClass().getResource("/com/cn/test/test2.txt")都能查找到test2.txt的原因了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java语言是一种面向对象的编程语言,由Sun Microsystems公司于1995年推出。它具有简单易学、跨平台、安全可靠等特点,广泛应用于各种软件开发领域。 以下是一些Java语言基础知识: 1. Java程序的基本结构:一个Java程序由一个或多个类组成,每个类包含属性(变量)和方法(函数)。一个Java程序必须包含一个类,并且该类必须包含一个名为`main`的方法作为程序的入口。 2. 数据类型:Java语言提供了多种数据类型,包括基本数据类型(如整数、浮点数、字符、布尔值等)和引用数据类型(如数组、类对象等)。 3. 变量和常量:在Java,使用关键字`var`或指定具体的数据类型来声明变量。变量可以被赋予不同的值,而常量则是一旦赋值就不能再改变的值。 4. 控制流程:Java语言提供了各种控制流程语句,如条件语句(`if-else`、`switch`)、循环语句(`for`、`while`、`do-while`)和跳转语句(`break`、`continue`、`return`)等,用于控制程序的执行流程。 5. 面向对象:Java是一种面向对象的编程语言,支持封装、继承和多态等面向对象的特性。面向对象编程的核心是类和对象,通过定义类来创建对象,并通过对象进行方法调用和属性访问。 6. 异常处理:Java提供了异常处理机制,用于处理程序运行时可能发生的错误或异常情况。通过捕获和处理异常,可以使程序具备更好的健壮性和容错性。 7. 输入输出:Java提供了丰富的输入输出类和方法,可以实现与用户交互、读写文件等功能。 这些只是Java语言基础知识Java还有很多其他的特性和功能。如果你对特定的主题或问题有更多的兴趣,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值