如何在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)
YourOutputStream
public void writeFile(File file) throws ZipFileFullException
public void writeFile(String path) throws ZipFileFullException
baos.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 文件中。