java:获取项目中文件

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包的位置。

猜你喜欢

转载自blog.csdn.net/x950913/article/details/106939721