我有一些类,其中包含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;
}
}
}
最后我希望存档包含文件夹&#34; c:\ test \ t1&#34;,&#34; c:\ test \ t2&#34;,&#34; c:\ test \ T3&#34; 感谢。
答案 0 :(得分:0)
答案:)
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(currFolder) );
}
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.lastIndexOf("\\") + 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 file : this.fileList) {
ZipEntry ze = new ZipEntry(file);
zos.putNextEntry(ze);
FileInputStream in = new FileInputStream(currFolder.substring(0, currFolder.lastIndexOf("\\")) + 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;
}
}
}