zno2

不能直接从jar 读取文件

What is a file?

https://www.computerhope.com/jargon/f/file.htm

文件的权限 delete,execute,read,write,readlink

abc.jar 是一个file

abc.jar!\test.xml 不是一个file,因为在电脑上不能用ls或dir将它显示出来。它是文件的内容的一部分,是二进制流。

测试

项目一

z-bean.                                                                                                                   
├─src                                                                                                               
│  ├─main                                                                                                          
│  │  ├─java                                                                                                      
│  │  └─resources                                                                                                 
│  │          test.xml       

项目二(依赖一)

z-test.                                                                           
│                                                                                                                    
├─src                                                                                                               
│  ├─main                                                                                                          
│  │  ├─java                                                                                                      
│  │  │      Main.java 

 

测试方法

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class Main {
    
    public static void main(String[] args) throws IOException {
        URL resource = Main.class.getClassLoader().getResource("test.xml");
        File file = new File(resource.getFile());
        System.out.println(file.exists());
    }

}

case1: 在eclipse中,两个项目都打开(文件夹源码形式依赖)

true

case2:在eclipse中,将z-bean 项目关闭(jar包形式依赖)

false

 

类似的还有:

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

import com.ibatis.common.resources.Resources;

public class Main {
    
    public static void main(String[] args) throws IOException {
        //此处如果用AsFile 则不存在,如果用stream或者reader则可以
//        InputStream resourceAsStream = Resources.getResourceAsStream("test.xml");
//        Reader resourceAsReader = Resources.getResourceAsReader("test.xml");
        File resourceAsFile = Resources.getResourceAsFile("test.xml");
        System.out.println(resourceAsFile.exists());
    }

}

 

小结

如果不能用计算机的命令展示(dir 或ls)的文件,都不存在。

jar包里的资源文件需要用流形式获取

posted on 2023-06-06 13:18  zno2  阅读(15)  评论(0编辑  收藏  举报

导航