Uri*_*iel 1 java compression directory file zipfile
我正在阅读本文以了解如何使用Java压缩/解压缩文件.我用它来指导我,它在压缩文件夹中的所有文件时效果很好,但是当我用一个包含更多文件夹的文件夹测试它时,它没有用,它引发了以下错误:
java.io.FileNotFoundException: assets (Access is denied) //assets is the name of the folder I tried to zip
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at Zip.main(Zip.java:24)
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的类,因为您将看到它与前一个链接中的相同的Code Sample 4:Zip.java类代码:
import java.io.*;
import java.util.zip.*;
public class Zip {
static final int BUFFER = 2048;
public void zip() {
try {
BufferedInputStream origin = null;
FileOutputStream dest = new
FileOutputStream("H:\\myfigs.zip");
CheckedOutputStream checksum = new
CheckedOutputStream(dest, new Adler32());
ZipOutputStream out = new
ZipOutputStream(new
BufferedOutputStream(checksum));
//out.setMethod(ZipOutputStream.DEFLATED);
byte data[] = new byte[BUFFER];
// get a list of files from current directory
File f = new File(".");
String files[] = f.list();
for (int i=0; i<files.length; i++) {
System.out.println("Adding: "+files[i]);
FileInputStream fi = new
FileInputStream(files[i]);
origin = new
BufferedInputStream(fi, BUFFER);
ZipEntry entry = new ZipEntry(files[i]);
out.putNextEntry(entry);
int count;
while((count = origin.read(data, 0,
BUFFER)) != -1) {
out.write(data, 0, count);
}
origin.close();
}
out.close();
System.out.println("checksum: "+checksum.getChecksum().getValue());
} catch(Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
应该进行哪些更改,以便此代码可以将文件夹内的文件夹及其所有文件压缩为zip文件?
zip条目需要指定存档内文件的路径.您无法将文件夹添加到zip存档 - 您只能添加文件夹中的文件.
命名约定是使用正斜杠作为路径分隔符.如果要使用以下文件/子目录压缩文件夹:
c:\foo\bar\a.txt
c:\foo\bar\sub1\b.txt
c:\foo\bar\sub2\c.txt
Run Code Online (Sandbox Code Playgroud)
zip条目名称将是:
a.txt
sub1/b.txt
sub2/c.txt
Run Code Online (Sandbox Code Playgroud)
因此,要修复算法,请在for循环中添加isDirectory(),然后以递归方式将任何子目录中的文件添加到zip中.可能最好的方法是使用一种方法:
addDirectoryToZip(String prefix, File directory, ZipOutputStream out)
Run Code Online (Sandbox Code Playgroud)
这是问题的解决方案:java.util.zip - 重新创建目录结构
| 归档时间: |
|
| 查看次数: |
4624 次 |
| 最近记录: |