一、先了解2个概念(绝对路径和相对路径)
1.绝对路径:从盘符开始的路径字串
例如:C:\Users\Public\Pictures
2.相对路径:文件相对于Java虚拟机启动目录的位置
分为一下2种情况
1>在命令行方式下执行(即初学时在命令行使用的java 类文件)
启动目录是命令解释器的当前目录(即“>”前面的一串)
2>使用集成开发环境(即IDE,常见的就是InteliJ IDEA,Eclipse)
启动目录由IDE控制,使用下面的代码获取此目录的位置,也是一个从盘符开始的位置
String string=System.getProperty("user.dir");
使用eclipse得到的结果:workspace是工作空间,demo是我的项目名称
使用Idea得到的结果 :Java_Test是存储目录,test是我的项目名称
二、怎么使用相对路径
绝对路径很方便写,直接从盘符开始,但为了方便,我们一般采用相对路径来描述资源文件的位置
1.常规使用:
例如:
File file = new File("Test.xml");
在eclipse中获取的是项目路径下的文件(不在src里面)
在Idea获取的Resources目录下的文件,(idea对Resources目录进行过修改,所有相对路径都从Resources目录开始加载,所以不需要像eclipse一样考虑加载路径的问题)
2.反射使用:
此处不关注细节,只讨论获取资源的方法
通过"类.class"获取类的Class对象,
调用getResourceAsStream(“文件名”)获取与此类同级路径下的资源
eclipse:
idea:无论如何都会从Resources目录开始加载
拓展:(只适用于eclipse,idea由于其自身封装的原因
getResourceAsStream与
getClassLoader().getResourceAsStream的加载路径都是Resources目录)
Class c=Test.class;//获取Class对象
// 从类所在目录开始检索
URL url = class1.getResource("a.jpg");//获取URL(统一资源定位器)
InputStream stream = class1.getResourceAsStream("a.jpg");//获取输入流
// 从类的上一级目录开始检索
InputStream stream = class1.getResourceAsStream("../a.jpg");//获取输入流
// 从Java虚拟机启动目录开始检索(即:System.getProperty("user.dir");)
InputStream stream4 = class1.getClassLoader().getResourceAsStream("resource/a.jpg");
附加项:路径转义问题
由于windows中路径由反斜杠“\”分隔,所以表示路径时需要使用反斜杠的转义“\\”
但有时需要对路径目录通过反斜杠进行分割,使用String.split()函数,即可返回字符数组,替换也是同样的道理使用“\\\\”替换
String[] strings=string.split("\\\\");