关于java压缩文件的一些问题
这段时间涉及到一个将不同目录下的file文件压缩到一个zip文件中,同时要保留原来的目录结构。
使用的压缩工具包是ant下的org.apache.tools.zip包(效率高)
java 的 zip压缩过程中,只要识别到
ZipEntry ze = new ZipEntry("/1/1.txt");.
new 一个 ZipEntry传入的参数中存在一个"/",就会在压缩文件中创建一个文件夹,以此来保持原来文件的目录结构
File file = new File("F:/file/1.zip");
try {
//先确定输出的文件
FileOutputStream fos = new FileOutputStream(file);
ZipOutputStream zos = new ZipOutputStream(fos);
byte[] buf = new byte[9216];
int len;
//设置需要压缩的文件在压缩文件中的位置
ZipEntry ze = new ZipEntry("/1/1.txt");
zos.putNextEntry(ze);
FileInputStream fis = new FileInputStream("F:/file/1.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
while((len = bis.read(buf)) != -1){
zos.write(buf, 0, len);
}
zos.closeEntry();
fos.close();
fis.close();
bis.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//对多个文件夹,不同目录结构的
public static void zip2(){
String[] paths = new String[]{"/1/1.txt","/2/2.txt"};
String[] relativePath = new String[]{"F:/file/1.txt","F:/file/2.txt"};
try {
File outFile = new File("F:/file/out.zip");
FileOutputStream fos = new FileOutputStream(outFile);
ZipOutputStream zos = new ZipOutputStream(fos);
byte[] buf = new byte[9216];
int len;
for(int i=0;i<2;i++){
ZipEntry ze = new ZipEntry(paths[i]);
zos.putNextEntry(ze);
FileInputStream fis = new FileInputStream(relativePath[i]);
BufferedInputStream bis = new BufferedInputStream(fis);
while((len = bis.read(buf)) != -1){
zos.write(buf, 0, len);
}
zos.closeEntry();
fis.close();
bis.close();
}
zos.close();
fos.close();
} catch (Exception e) {
// TODO: handle exception
}
}
网友评论