Java 确定类路径资源文件大小 问题
是否可以确定任意类路径资源的大小?下面是一个假设的构建(完全公开:我不是谷歌)。在本例中,我希望获得icon.png的大小Java 确定类路径资源文件大小 问题,java,classpath,classloader,Java,Classpath,Classloader,是否可以确定任意类路径资源的大小?下面是一个假设的构建(完全公开:我不是谷歌)。在本例中,我希望获得icon.png的大小 src com 谷歌 App.java icon.png app.json 我知道我可以使用这个资源的URI(从类路径URL)创建一个路径/文件,并获得它的大小 Files.size(Path.get(ClassLoader.getSystemResource(iconPath.toURI())) 但我的理解是,当我将其部署在JAR中或使用AOT编译工具(
- src
- com
- 谷歌
- App.java
- icon.png
- app.json
- 谷歌
- com
Files.size(Path.get(ClassLoader.getSystemResource(iconPath.toURI()))
但我的理解是,当我将其部署在JAR中或使用AOT编译工具(如)时,这将不起作用
注意:在这两种情况下(Excelsior或JAR),我可以加载icon.png
我只是想澄清一下。我的目标是而不是从给定资源获取文件!目标是获得资源的大小。以上只是一个失败解决方案的示例
原因
在运行时加载许多资源时获取准确的进度信息
将当前进度从当前处理的字节数等同于要处理的字节总数
TL;DR我只需要有人告诉我这是不可能的,这样我就可以想出一个不同的解决方案。答对了。找到了一个答案,并想与其他尝试做同样事情的人分享 诀窍是从类加载器提供的URL获取内容长度。看起来有点像这样:
ClassLoader.getSystemResource(iconPath).openConnection().getContentLength();
我猜这意味着JRE在URL连接的content length头字段中提供了资源的大小
编辑
- 根据EJP的意见:
-
它提供了它,但不在标题中。资源URL是一个神奇的系统: URL类型,该类型由实现 通过查看实际资源来获取getContentLength()
-
- getContentLength
- getContentEncoding
- getContentType
- getDate
- 获取到期日
- getLastModified
getContentLength: 2817
getContentEncoding: null
getContentType: image/png
getDate: 0
getExpiration: 0
getLastModified: 1456358464819
看起来唯一有用的信息(我非常满意)是内容长度、类型和修改的
我继续并确认,这对可执行JAR和Excelsior JET 11构建的应用程序都有效
注意:这是在运行SE 1.8.0_72的Windows 10 Home计算机上测试的。换句话说,我不确定头信息在其他操作系统或更低版本的Java上是否可用
尽管如此,干杯。它提供了它,但不是在标题中。资源URL是一种神奇的
系统:
URL类型,它由URLConnection
子类支持,该子类通过查看实际资源来实现getContentLength()
。在调用openConnection()
之前,您需要对返回的URL进行null检查。谢谢您提供的信息!@空检查:这根本不是我实际获取URL/URLConnection的方式——我们的API涵盖了空检查和异常处理,恐怕没有。我只是想简明扼要。