Tag: zip

将Java Deflater / Inflater与自定义字典一起使用会导致IllegalArgumentException

以下代码基于java.util.zip.Deflater的javadocs中给出的示例。 我所做的唯一更改是创建一个名为dict的字节数组,然后使用setDictionary(byte [])方法在Deflater和Inflater实例上设置字典。 我看到的问题是,当我用与Deflater完全相同的数组调用Inflater.setDictionary()时,我得到一个IllegalArgumentException。 这是有问题的代码: import java.util.zip.Deflater; import java.util.zip.Inflater; public class DeflateWithDictionary { public static void main(String[] args) throws Exception { String inputString = “blahblahblahblahblah??”; byte[] input = inputString.getBytes(“UTF-8”); byte[] dict = “blah”.getBytes(“UTF-8”); // Compress the bytes byte[] output = new byte[100]; Deflater compresser = new Deflater(); compresser.setInput(input); compresser.setDictionary(dict); compresser.finish(); int compressedDataLength = compresser.deflate(output); // […]

使用ZipFileSystem压缩一个巨大的文件夹会导致OutOfMemoryError

通过将zip文件视为文件系统, java.nio包有一种处理zip文件的漂亮方式。 这使我们能够像普通文件一样处理zip文件内容。 因此,只需使用Files.copy将所有文件复制到zip文件中即可实现压缩整个文件夹。 由于子文件夹也要复制,我们需要一个访问者: private static class CopyFileVisitor extends SimpleFileVisitor { private final Path targetPath; private Path sourcePath = null; public CopyFileVisitor(Path targetPath) { this.targetPath = targetPath; } @Override public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) throws IOException { if (sourcePath == null) { sourcePath = dir; } else { Files.createDirectories(targetPath.resolve(sourcePath .relativize(dir).toString())); } […]

通过Java生成tar文件

我想使用Java将文件夹压缩为tar文件(以编程方式)。 我认为必须有一个开源或库来实现它。 但是,我找不到这样的方法。 或者,我可以制作一个zip文件并将其扩展名重命名为.tar吗? 有人可以建议图书馆这样做吗? 谢谢!

在Java中以zip方式添加非ASCII文件名

使用Java将非ASCII文件名添加到zip文件的最佳方法是什么,这样可以在Windows和Linux中正确读取文件? 这是一个改编自https://truezip.dev.java.net/tutorial-6.html#Example的尝试,它适用于Windows Vista但在Ubuntu Hardy中失败。 在Hardy中,文件名在file-roller中显示为abc-ЖДФ.txt。 import java.io.IOException; import java.io.PrintStream; import de.schlichtherle.io.File; import de.schlichtherle.io.FileOutputStream; public class Main { public static void main(final String[] args) throws IOException { try { PrintStream ps = new PrintStream(new FileOutputStream( “outer.zip/abc-åäö.txt”)); try { ps.println(“The characters åäö works here though.”); } finally { ps.close(); } } finally { File.umount(); } } } […]

在Java中解压缩内存中的ZIP文件

我正在下载包含XML的压缩文件,我想避免在操作它们之前将zip文件写入磁盘,因为延迟要求。 但是, java.util.zip对我来说还不够。 没有办法说“这里是zip文件的字节数组,使用它”而不将其转换为流, ZipInputStream不可靠,因为它会扫描条目标题(请参阅EDIT下面的讨论,了解为什么不可靠) 。 我还没有访问我将要处理的zip文件,所以我不知道我是否能够通过ZipInputStream处理它们,我需要找到一个适用于任何有效ZIP文件的解决方案,作为一旦我投入生产失败的惩罚将会很高。 假设ZipInputStream不起作用,在没有条目标题的情况下,我该怎么做才能解决这个问题? 我正在使用维基百科的定义 ,其中包括如何正确解压缩zip文件(下面引用)作为标准。 编辑 Apache Commons Zip库对使用Stream(他们的解决方案和Java)的一些问题进行了很好的描述。 我将进一步补充,从维基百科和个人经验来看,条目标题上的大小和crc字段可能无法填充(我在这些字段中的文件为-1)。 感谢centic提供此链接。 另外,让我引用维基百科的主题: 正确读取zip存档的工具必须扫描各个字段的签名,即zip中心目录。 它们不能扫描条目,因为只有目录指定文件块的开始位置。 扫描可能导致误报,因为格式不禁止其他数据在块之间或包含此类签名的未压缩流之间。 请注意, ZipInputStream扫描条目,而不是中心目录,这是它的问题。 最终编辑 如果有人感兴趣,可以使用此脚本生成ZipInputStream无法从现有ZIP文件读取的有效ZIP文件。 所以,作为这个封闭问题的最终编辑,我需要一个可以读取文件的库,例如这个脚本生成的文件。

在zip存档中使用Unicode字符表示文件名

我正在压缩文件名包含一些特殊字符,如PéréquationLESHOPITAUX NEUFS.xls到另一个文件夹,比如temp 。 我能够压缩文件,但问题是文件名自动更改为P +¬r+¬quationLESHOPITAUX NEUFS.xls 。 如何在zip存档中支持文件名的unicode字符?

如何用Java创建ZIP文件?

什么是Java这个jar命令的等价物: C:\>jar cvf myjar.jar directory 我想以编程方式创建这个jar文件,因为我无法确定jar命令将位于我可以运行外部进程的系统路径上。 编辑 :我想要的只是归档(和压缩)一个目录。 不必遵循任何java标准。 即:标准拉链很好。

使用JDK 5 api从zip文件中提取时保持文件权限

我正在使用java.util.Zip和java.util.ZipEntry成功地将zip文件的内容添加到磁盘。 我想在* nix文件系统上提取时保持设置的文件权限。 任何人都可以指出我这样做的“正确”方法吗?

java.util.zip.ZipException:CEN标头无效(签名错误)

在执行此(相对简单的)代码时,我收到此错误: ZipFile zf = new ZipFile(fn); Enumeration eze = zf.entries(); while (eze.hasMoreElements()) { ZipEntry ze = eze.nextElement(); System.out.println(ze.getName()); } zf.close(); 其实。 有趣的是,我在java-sun-6u32和java-1.6.0-openjdk-amd64上得到它,但java-sun-7u4成功了。 解压缩本身似乎处理得很好。 我猜这意味着这些zip文件可能是由java 7理解的一些较新版本的zip创建的,但之前的版本没有。 但是,任何见解都会受到赞赏。 另外,因为在制作中我真的没有选择使用java 7,任何使早期版本的java都能理解这个新版本的zip(当然,如果事实上这就是问题所在。) 谢谢!

如何从Java中读取Winzip自解压缩(exe)zip文件?

是否存在现有方法或者我需要在将数据传递给ZipInputStream之前手动解析并跳过exe块?