Java语言中的路径基础知识(总是忘,记录下)
来源:互联网 发布:js高德地图api接口 编辑:程序博客网 时间:2024/05/22 05:04
Java中路径知识
一、换行符
换行(\n)就是光标下移一行却不会移到这一行的开头。
二、回车符
回车(\r)就是回到当前行的开头却不向下移一行。
Enter键按下后会执行\n\r这样就是我们看到的一般意义的回车了,所以你用16进制文件查看方式看一个文本,就会在行尾发现"\r\n"。
三、制表符
Tab是制表符,就是"\t",作用是预留8个字符的显示宽度,用于对齐。
四、System.getProperties()当前系统属性
1)file.separator
文件分隔符,在Windows系统中是“\”,在UNIX系统中是“/”。
在代码中也可以这样获取:
2)path.separator
路径分隔符,在Windows系统中是“;”即分号,在UNIX系统中是“:”即冒号。
在代码中也可以这样获取:
3)line.separator
行分隔符,在Windows系统中是“\r\n”;而在在UNIX系统中是“/n”即换行符。
在代码中也可以这样获取:
4)user.name
用户的账户名称
5)user.home
用户的主目录
6)user.dir
用户的当前工作目录
在代码中也可以这样获取:
五、Class.getResource与ClassLoader.getResource用法与区别
工程根目录
|-com.cn.test
|-Test.class
|-test2.txt
|-test1.txt
1)利用Class.getResource方法来获取资源的时候,路径写法有两种
与
当采用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方法要么是根据当前类路径进行查找,要么是一绝对路径方式,从根目录进行查找。
2)利用ClassLoader.getResource方法来获取资源,就没有上面的这么麻烦,只有一种写法。
ClassLoader.getResource方法的路径不需要以“/”开头,但是该方法默认从项目根目录开始查找。
这么看来ClassLoader.getResource方法的用法与this.getClass().getResource("/com/cn/test/test2.txt")这种写法其实是一样的。
为什么呢?我们来看下this.getClass().getResource方法的源码:
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的原因了
一、换行符
换行(\n)就是光标下移一行却不会移到这一行的开头。
二、回车符
回车(\r)就是回到当前行的开头却不向下移一行。
Enter键按下后会执行\n\r这样就是我们看到的一般意义的回车了,所以你用16进制文件查看方式看一个文本,就会在行尾发现"\r\n"。
三、制表符
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"));
五、Class.getResource与ClassLoader.getResource用法与区别
工程根目录
|-com.cn.test
|-Test.class
|-test2.txt
|-test1.txt
1)利用Class.getResource方法来获取资源的时候,路径写法有两种
- 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方法要么是根据当前类路径进行查找,要么是一绝对路径方式,从根目录进行查找。
2)利用ClassLoader.getResource方法来获取资源,就没有上面的这么麻烦,只有一种写法。
- //注意这种写法中,路径前面没有“/”
- this.getClass().getClassLoader().getResource("test1.txt");
ClassLoader.getResource方法的路径不需要以“/”开头,但是该方法默认从项目根目录开始查找。
这么看来ClassLoader.getResource方法的用法与this.getClass().getResource("/com/cn/test/test2.txt")这种写法其实是一样的。
为什么呢?我们来看下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
- Java语言中的路径基础知识(总是忘,记录下)
- Java语言中的路径基础知识(总是忘,记录下)
- Java 语言基础知识(一)
- 记录学习的点滴(Java基础知识)
- java基础知识记录--集合
- Java基础知识记录
- JAVA基础知识整理记录
- Java基础知识学习记录
- java基础知识记录
- Java 基础知识记录
- C语言基础知识学习记录
- 记录下mac查看java 安装路径的问题
- 数据结构与C语言实现(六)——树(下):题目:堆中的路径
- Java语言基础知识
- JAVA语言基础知识
- java语言基础知识
- java语言基础知识01
- 【Java语言】基础知识一
- 视频会议十大开源项目排行 .
- 你不常用却常见的matlab函数
- @requestmapping--springmvc注解的使用变量和全局部*替代变量方法
- jQuery 之 setTimeout 传递字符串参数报错
- js面向对象编程: js类定义函数时用不用prototype的区别?
- Java语言中的路径基础知识(总是忘,记录下)
- 为程序生成高质量的条形码控件Barcode Professional SDK
- 驱动开发之 虚拟地址空间
- 发帖就各一块一个
- java SWT 开发,递归生成Tree
- 输入法之语料选择
- junctions_skeleton——通过该算子获取骨架的交点和端点,可判断前景的几何简单性(二次分割定位)
- Intel Pin抓取Hadoop 和Spark 中java进程
- 调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment