java获取项目中的文件:
public class Test {
public static void main(String[] args) throws URISyntaxException {
//1.调用类对象的getResource方法获取文件
URL resource = Test.class.getResource("");
System.out.println(resource);
URL ifFileNotExist = Test.class.getResource("test.txt");
System.out.println(resource);
//2.调用类加载器的getResource方法获取文件
resource = Test.class.getClassLoader().getResource("test.txt");
System.out.println(resource);
//3.调用类加载器的getResource方法获取文件,并调用返回的url对象的getPath获取路径
String path = Test.class.getClassLoader().getResource("test.txt").getPath();
System.out.println(path);
//4.调用系统变量的getProperty方法获取user.dir路径
String property = System.getProperty("user.dir");
System.out.println(property);
}
}
输出:
file:/E:/code/workhome/javatest/target/classes/com/zixuan/test/
null
file:/E:/code/workhome/javatest/target/classes/test.txt
/E:/code/workhome/javatest/target/classes/test.txt
E:\code\workhome\javatest
打jar包后,运行jar包的输出:
jar:file:/C:/Users/zixuan/Desktop/javatest-1.0-SNAPSHOT.jar!/com/zixuan/test/
jar:file:/C:/Users/zixuan/Desktop/javatest-1.0-SNAPSHOT.jar!/com/zixuan/test/
jar:file:/C:/Users/zixuan/Desktop/javatest-1.0-SNAPSHOT.jar!/test.txt
file:/C:/Users/zixuan/Desktop/javatest-1.0-SNAPSHOT.jar!/test.txt
C:\Users\zixuan\Desktop
解析:
Test.class.getResource(""):反射获取Test类的类对象,再调用该对象的getResource方法,获取该类所在位置。getResource的可以传入一个文件名,获取同一位置下的其他文件。返回的是一个url对象,可调用该对象的toUri方法转换成uri,并用于创建文件对象。如果该文件不存在,则返回null。
Test.class.getClassLoader().getResource("test.txt"):获取类加载器对象,通过加载器对象的getResource方法获取文件,与直接调用class对象的getResource方法区别在于,class调用返回的是该类所在的位置,类加载器调用返回的是项目的根目录。
System.getProperty("user.dir"):返回系统的user.dir的值,System.getProperty可以获取系统环境的方法,传入相应的key,返回该值,其中user.dir是这个项目的同级目录,打成jar包后,返回的则是运行jar包的位置。