【发布时间】:2014-12-10 13:27:23
【问题描述】:
我有一些类,将目录打包为 zip 文件,但我想将其修改为打包目录列表。我正在尝试,但没有成功。我不知道为什么。 所以,我给了 List 并希望每个目录(包括子目录和文件)都归档。
这是我的主要课程:
class Main {
public static void main(String[] args) throws IOException, InterruptedException {
ZipNew zn = new ZipNew();
List<String> foldersList = new ArrayList<String>();
foldersList.add("c:\\test\\t1");
foldersList.add("c:\\test\\t2");
foldersList.add("c:\\test\\t3");
String zipNewPath = "c:\\test\\testAll.zip";
zn.pack(foldersList, zipNewPath);
}
}
这是 zip 处理器:
public class ZipNew {
private List<String> fileList = new ArrayList<String>();
private String outputZip;
private List<String> sourceFolders = new ArrayList<String>();
private String currFolder;
public boolean pack(List<String> sourceFolders, String outputZip) {
this.outputZip = outputZip;
this.sourceFolders = sourceFolders;
for (String sourceFolder : sourceFolders) {
this.currFolder = sourceFolder;
generateFileList( new File(sourceFolder) );
}
boolean packed = packInZip(outputZip);
return packed;
}
private void generateFileList(File node){
if(node.isFile()){
fileList.add(generateZipEntry(node.getAbsoluteFile().toString()));
}
else if(node.isDirectory()){
String[] subNote = node.list();
for(String filename : subNote){
generateFileList(new File(node, filename));
}
}
}
private String generateZipEntry(String file){
return file.substring(currFolder.length() + 1, file.length());
}
private boolean packInZip(String zipFile){
byte[] buffer = new byte[1024];
try{
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
for (String sourceFolder : sourceFolders) {
this.currFolder = sourceFolder;
for (String file : this.fileList) {
ZipEntry ze = new ZipEntry(file);
zos.putNextEntry(ze);
FileInputStream in = new FileInputStream(sourceFolder + File.separator + file);
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
in.close();
}
}
zos.closeEntry();
zos.close();
return true;
} catch(IOException ex){
ex.printStackTrace();
return false;
}
}
}
最后,我希望存档包含文件夹“c:\test\t1”、“c:\test\t2”、“c:\test\t3” 谢谢。
【问题讨论】: