如何在Java中创建之前估计java中的zip文件大小
我有一个要求,其中我必须从可用文件列表中创建一个zip文件。这些文件是不同类型的,如txt,pdf,xml等。我正在使用java util类来做到这一点。
此处的要求是保持最大文件大小 5 mb。我应该根据时间戳从列表中选择文件,将文件添加到zip,直到zip文件大小达到5 mb。我应该跳过剩余的文件。
请让我知道,如果有一种方法在java中,我可以在不创建实际文件的情况下提前估计zip文件大小?
或者有没有其他方法来解决这个问题
我有一个要求,其中我必须从可用文件列表中创建一个zip文件。这些文件是不同类型的,如txt,pdf,xml等。我正在使用java util类来做到这一点。
此处的要求是保持最大文件大小 5 mb。我应该根据时间戳从列表中选择文件,将文件添加到zip,直到zip文件大小达到5 mb。我应该跳过剩余的文件。
请让我知道,如果有一种方法在java中,我可以在不创建实际文件的情况下提前估计zip文件大小?
或者有没有其他方法来解决这个问题
将您的 ZipOutputStream 包装到一个个性化的 OutputStream 中,此处命名为 YourOutputStream。
ZipOutputStream(zos2),它包装一个新的ByteArrayOutputStream(baos)public YourOutputStream(ZipOutputStream zos, int maxSizeInBytes)
YourOutputStreampublic void writeFile(File file) throws ZipFileFullExceptionpublic void writeFile(String path) throws ZipFileFullExceptionbaos.size() 低于maxSizeInBytes
您需要两个ZipOutputStream,一个写在驱动器上,一个用于检查您的内容是否超过5MB。
编辑:事实上我检查过,你不能轻易删除ZipEntry。
http://download.oracle.com/javase/6/docs/api/java/io/ByteArrayOutputStream.html#size()
科林·赫伯特的+1:逐个添加文件,备份上一步或删除最后一个文件(如果存档很大)。我只想添加一些细节:
预测太不可靠了。例如,PDF可以包含未压缩的文本,并压缩到原始文本的30%,或者它包含已经压缩的文本和图像,压缩到80%。您需要检查整个PDF的可压缩性,基本上必须压缩它们。
您可以尝试进行统计预测,但这可以减少失败尝试的次数,但您仍然必须实现上述建议。首先使用更简单的实现,看看它是否足够。
或者,单独压缩文件,然后选择绑定在一起不会超过 5 MB 的文件。如果解压缩也是自动的,则可以将 zip 文件绑定到单个未压缩的 zip 文件中。