我正在使用java.util.zip压缩java中的一些文件。我遇到的问题是压缩文件将为所有父目录创建文件夹。例如,如果我在C:/folder1/folder2/folder3/file.txt有一个文件
这将创建一个压缩文件,其文件夹名为folder 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();
}
答案 0 :(得分:1)
替换此行
ZipEntry entry = new ZipEntry(files[i]);
通过
ZipEntry entry = new ZipEntry(files[i].substring(files[i].lastIndexOf("/")+1));
创建zipEntry时,需要指定文件名而不是完整路径。
修改强>
一种更干净的方式(如Louis Wasserman评论)将使用File对象并获取文件名。这将是一种在压缩文件之前检查文件是否存在的方法。
答案 1 :(得分:0)
您可能想要查看在提出类似问题时给出的答案: How can i zip ...