java - 获取资源的大小

标签 java scala

我正在使用 getClass().getResourceAsStream(path) 来读取包资源。

如何在读取整个流之前知道文件大小?

打包后,我无法使用 getClass().getResource(path).toURI() 访问它们,因此无法正常工作。

最佳答案

我尝试回答这篇文章 Ask for length of a file read from Classpath in java但他们将其标记为与您的问题重复,所以我在这里给出我的答案!

可以使用以下方法获取简单文件的大小:

File file = new File("C:/Users/roberto/Desktop/bar/file.txt");
long length = file.length();
System.out.println("Length: " + length);

file.txt 被打包到一个 jar 中时,.length() 将始终返回 0。
所以我们需要使用JarFile:

JarFile jarFile = new JarFile("C:/Users/roberto/Desktop/bar/foo.jar");
Object size = jarFile.getEntry("file.txt").getSize();
System.out.println("Size: " + size.toString())

你也可以获得压缩后的大小:

JarFile jarFile = new JarFile("C:/Users/roberto/Desktop/bar/foo.jar");
Object compressedSize = jarFile.getEntry("file.txt").getCompressedSize();
System.out.println("CompressedSize: " + compressedSize);

仍然可以使用 jar 命令获取打包在 jar 中的文件的大小:

jar tvf Desktop\bar\foo.jar file.txt

输出将为:5 Thu Jun 27 17:36:10 CEST 2019 file.txt
其中 5 是大小。

你可以在代码中使用它:

Process p = Runtime.getRuntime().exec("jar tvf C:/Users/roberto/Desktop/bar/foo.jar file.txt");
StringWriter writer = new StringWriter();
IOUtils.copy(p.getInputStream(), writer, Charset.defaultCharset());
String jarOutput = writer.toString();  

但是运行jar命令需要jdk。

关于java - 获取资源的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34360826/

相关文章:

scala - 如何避免Scala中的可变局部变量?

java - 维护线程池任务队列的类型信息

java - Hibernate错误查询生成

java - 原生快速广告 View 的广告尺寸是多少?

java - 没有安全标志的 Cookie jboss 5.1

java - 如何从 scala 案例类生成 java 数组

scala - Scala 中的 += 运算符

java - 为第一轮 Switch Java 制作 If 语句

java - 每次我尝试在 mysql 数据库中插入数据(在 springboot java 上)时,Autowired 存储库都会收到 nullPointerException 错误

scala - 发送电子邮件时 Play Framework 中的 NoSuchElementException?