java jar包相关获取文件路径问题

相关问题总结;
在获取根目录时:


    public static void main(String[] args) throws IOException {

        URL resource = MyTest.class.getResource("/");
        URL resource2 = MyTest.class.getResource("");
        URL resource3 = MyTest.class.getClassLoader().getResource("");
        URL resource4 = MyTest.class.getClassLoader().getResource("/");

        URL resource5 = MyTest.class.getClassLoader().getClass().getResource("");
        URL resource6 = MyTest.class.getClassLoader().getClass().getResource("/");

        String path = MyTest.class.getProtectionDomain().getCodeSource().getLocation().getPath();

        System.out.println("codesource:"+path); // jar包和idea环境均获取相同值,为当前项目路径
        File f = new File(path);
        System.out.println("exist?"+f.exists());

        String path2 = System.getProperty("java.class.path");
        System.out.println("path2::"+path2); // 获取环境变量,jar 中就是获取当前jar包名称。

        System.out.println("class / :"+resource); // idea中获取当前项目地址,jar中为null
        System.out.println("class 空 :"+resource2); // idea 中获取当前类所在位置。 jar中也是,但是不是file,是jar格式
        System.out.println("classloader / :"+resource4); // idea null  jar  null
        System.out.println("classloader 空 :"+resource3); // idea 当前项目地址  jar null

        System.out.println("loader+class/:"+resource6); // idea 当前项目地址 jar 空
        System.out.println("loader+class 空:"+resource5); // idea null  jar null

        // 找到jar包内,properties指定位置路径下所有指定类型的文件
        if (path.endsWith(".jar")){ // 若是jar包,则需要这样做来获取文件
            System.out.println("jar execute");
            JarFile jarFile = new JarFile(path);
            Enumeration<JarEntry> entries = jarFile.entries();
            while (entries.hasMoreElements()){
                JarEntry jarEntry = entries.nextElement();
                String name = jarEntry.getName(); // 全类名(/cn/text/A.class),以及包名
//                System.out.println(name);
                if (name.startsWith("fxml/")&&name.endsWith(".txt")){
                    System.out.println("zhjao");
                    BufferedReader b = new BufferedReader(new BufferedReader(new InputStreamReader(MyTest.class.getResourceAsStream("/"+name))));
                    String s = b.readLine();
                    System.out.println(s);
                }
            }
        }

        InputStream resourceAsStream = MyTest.class.getResourceAsStream("/config.properties"); // idea与jar均相同,获取jar项目内文件输入流
        Properties p = new Properties();
        p.load(resourceAsStream);
        System.out.println(p);


    }

在获取文件情况下:

    public void testtt() throws IOException {

        URL resource = MyTest.class.getResource("/config.properties");
        URL resource2 = MyTest.class.getResource("config.properties");
        URL resource3 = MyTest.class.getClassLoader().getResource("config.properties");
        URL resource4 = MyTest.class.getClassLoader().getResource("/config.properties");

        URL resource5 = MyTest.class.getClassLoader().getClass().getResource("config.properties");
        URL resource6 = MyTest.class.getClassLoader().getClass().getResource("/config.properties");

        String path = MyTest.class.getProtectionDomain().getCodeSource().getLocation().getPath();

        System.out.println("codesource:"+path); // jar包和idea环境均获取相同值,为当前项目路径
        File f = new File(path);
        System.out.println("exist?"+f.exists());

        String path2 = System.getProperty("java.class.path");
        System.out.println("path2::"+path2); // 获取环境变量,jar 中就是获取当前jar包名称。

        System.out.println("class / :"+resource); // idea jar中均可以取到,jar 中是jar模式
        System.out.println("class 空 :"+resource2); // idea jar 均为空
        System.out.println("classloader / :"+resource4); // idea null  jar  null
        System.out.println("classloader 空 :"+resource3); // idea 可以取到资源  jar 可以取到 jar模式

        System.out.println("loader+class/:"+resource6); // idea 可以取到资源  jar 可以取到 jar模式
        System.out.println("loader+class 空:"+resource5); // idea null  jar null

        // 找到jar包内,properties指定位置路径下所有指定类型的文件
        if (path.endsWith(".jar")){ // 若是jar包,则需要这样做来获取文件
            System.out.println("jar execute");
            JarFile jarFile = new JarFile(path);
            Enumeration<JarEntry> entries = jarFile.entries();
            while (entries.hasMoreElements()){
                JarEntry jarEntry = entries.nextElement();
                String name = jarEntry.getName(); // 全类名(/cn/text/A.class),以及包名
//                System.out.println(name);
                if (name.startsWith("fxml/")&&name.endsWith(".txt")){
                    System.out.println("zhjao");
                    BufferedReader b = new BufferedReader(new BufferedReader(new InputStreamReader(MyTest.class.getClassLoader().getResourceAsStream(name))));
                    String s = b.readLine();
                    System.out.println(s);
                }
            }
        }

        InputStream resourceAsStream = MyTest.class.getResourceAsStream("/config.properties"); // idea与jar均相同,获取jar项目内文件输入流
        Properties p = new Properties();
        p.load(resourceAsStream);
        System.out.println(p);

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值