读取jar包中的资源文件
程序员文章站
2022-04-28 09:20:52
...
方法一:
URL fileURL = this.getClass().getResource("/beauty.jpg");
byte[] bytes = File2byte(fileURL.getFile());
方法二:
InputStream is=this.getClass().getResourceAsStream("/beauty.jpg");
方法一会有路径错误的问题,因为jar包中文件URL有专用格式的:jar:!/{entry};所以我们不能以此来取文件;如果要读取必须要求集成环境和JAR包运行时资源文件放入不同的的路径。也就是说beauty.jpg在两种情况下应该放入不同的位置。
在这两条语句前
Properties p = new Properties();
URL url=this.getClass().getResource(“/”+file);
前加入:
System.out.println(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
System.out.println(this.getClass().getResource(“/”));
System.out.println(this.getClass().getResource(“”));
第一个语句是打印classpath的绝对路径。根据打印的结果就应该知道资源文件就放入JAR包什么位置,在集成环境时应该放入到哪才行。
getResource方法的参数以斜杠开头表示url相对于根classpath的路径。
推荐方法二这个方法是透明的,你可以像普通的File一样去定位jar包中的资源文件(不管你是jar文件还是普通的文件夹);但是这种方法是有缺陷的,JRE会对读入的文件进行缓存,应用启动后,无法刷新
还有一个方法是使用java.util.jar.JarFile类访问,这里面包含里大多对于jar操作的方法,可以参考API应用。