java 压缩的时候怎么解决 ZipEntry.getCompressedSize() 为-1
时间: 2024-04-15 09:31:55 浏览: 22
在使用 Java 进行压缩时,有时会遇到 ZipEntry.getCompressedSize() 返回 -1 的情况。这是因为压缩过程中,压缩库无法确定文件的准确压缩大小。如果你需要获取准确的压缩大小,可以尝试以下方法来解决:
1. 使用 DeflaterOutputStream 和 ByteArrayOutputStream:使用 DeflaterOutputStream 类将数据写入 ByteArrayOutputStream,然后通过调用 ByteArrayOutputStream 的 toByteArray() 方法获取压缩后的字节数组。示例代码如下:
```java
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(byteArrayOutputStream);
// 将文件内容写入 deflaterOutputStream
deflaterOutputStream.close();
byte[] compressedData = byteArrayOutputStream.toByteArray();
long compressedSize = compressedData.length;
```
2. 使用 ZipOutputStream 和临时文件:使用 ZipOutputStream 将文件内容写入临时文件,并通过调用临时文件的 length() 方法获取压缩后的文件大小。示例代码如下:
```java
File inputFile = new File("your_input_file");
File outputFile = new File("your_output_file.zip");
try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(outputFile));
FileInputStream fileInputStream = new FileInputStream(inputFile)) {
ZipEntry zipEntry = new ZipEntry("your_entry_name");
zipOutputStream.putNextEntry(zipEntry);
byte[] buffer = new byte[1024];
int length;
while ((length = fileInputStream.read(buffer)) > 0) {
zipOutputStream.write(buffer, 0, length);
}
zipOutputStream.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
long compressedSize = outputFile.length();
```
这些方法可以在压缩过程中获取准确的压缩大小。请根据你的具体需求选择合适的方法来解决问题。
相关推荐
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)