我正在使用 java.util.zip 来压缩 java 中的一些文件。我遇到的问题是压缩文件将为所有父目录创建文件夹。例如,如果我有一个文件位于 C:/folder1/folder2/folder3/file.txt
这将创建一个压缩文件,其中包含名为文件夹 1 的文件夹,然后是文件夹 2,依此类推,直到 file.txt。
我正在寻找的结果是一个压缩文件夹,根目录下只有 file.txt 文件,没有任何文件夹。
这是一些示例代码
BufferedInputStream origin = null;
FileOutputStream dest = new
FileOutputStream("c:\\zip\\myfigs.zip");
ZipOutputStream out = new ZipOutputStream(new
BufferedOutputStream(dest));
//out.setMethod(ZipOutputStream.DEFLATED);
byte data[] = new byte[BUFFER];
// get a list of files from current directory
String files[] = {"C:/folder1/folder2/folder3/file.txt"};
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();
} catch(Exception e) {
e.printStackTrace();
}
最佳答案
替换此行
ZipEntry entry = new ZipEntry(files[i]);
由
ZipEntry entry = new ZipEntry(files[i].substring(files[i].lastIndexOf("/")+1));
创建 zipEntry 时,需要指定文件名而不是完整路径。
编辑:
一种更简洁的方法(就像 Louis Wasserman 评论的那样)是使用 File 对象并获取文件名。这是在压缩文件之前检查文件是否存在的一种方法。
关于用于压缩文件的 Java api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9438055/