자바 zip 파일 로 압축
6639 단어 도구 클래스
package com;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.zip.ZipOutputStream;
public class ZipInput {
private static final int BUFFER_SIZE = 2 * 1024;
/**
* ZIP 1
* @param srcDir
* @param out
* @param KeepDirStructure ,true: ;
* false: ( : , )
* @throws RuntimeException
*/
public static void toZip(String srcDir, OutputStream out, boolean KeepDirStructure) throws RuntimeException{
long start = System.currentTimeMillis();
ZipOutputStream zos = null ;
try {
zos = new ZipOutputStream(out);
File sourceFile = new File(srcDir);
compress(sourceFile,zos,sourceFile.getName(),KeepDirStructure);
//
File srcDirFile=new File(srcDir);
delete(srcDirFile);
long end = System.currentTimeMillis();
System.out.println(" , :" + (end - start) +" ms");
} catch (Exception e) {
throw new RuntimeException("zip error from ZipUtils",e);
}finally{
if(zos != null){
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
*
* @param srcDirFile
*/
private static void delete(File srcDirFile) {
if (srcDirFile.isFile()){// , ,
System.out.println(srcDirFile.getAbsoluteFile());//
srcDirFile.delete();
}else{// ,
String[] childFilePath = srcDirFile.list();//
for (String path:childFilePath){
File childFile= new File(srcDirFile.getAbsoluteFile()+"/"+path);
delete(childFile);// ,
}
System.out.println(srcDirFile.getAbsoluteFile());
srcDirFile.delete();
}
}
/**
* ZIP 2
* @param srcFiles
* @param out
* @throws RuntimeException
*/
public static void toZip(List srcFiles , OutputStream out)throws RuntimeException {
long start = System.currentTimeMillis();
ZipOutputStream zos = null ;
try {
zos = new ZipOutputStream(out);
for (File srcFile : srcFiles) {
byte[] buf = new byte[BUFFER_SIZE];
zos.putNextEntry(new ZipEntry(srcFile.getName()));
int len;
FileInputStream in = new FileInputStream(srcFile);
while ((len = in.read(buf)) != -1){
zos.write(buf, 0, len);
}
zos.closeEntry();
in.close();
}
long end = System.currentTimeMillis();
System.out.println(" , :" + (end - start) +" ms");
} catch (Exception e) {
throw new RuntimeException("zip error from ZipUtils",e);
}finally{
if(zos != null){
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
*
95
* @param sourceFile
* @param zos zip
* @param name
* @param KeepDirStructure ,true: ;
* false: ( : , )
* @throws Exception
*/
private static void compress(File sourceFile, ZipOutputStream zos, String name, boolean KeepDirStructure) throws Exception{
byte[] buf = new byte[BUFFER_SIZE];
if(sourceFile.isFile()){
// zip zip , name zip
zos.putNextEntry(new ZipEntry(name));
// copy zip
int len;
FileInputStream in = new FileInputStream(sourceFile);
while ((len = in.read(buf)) != -1){
zos.write(buf, 0, len);
}
// Complete the entry
zos.closeEntry();
in.close();
} else {
File[] listFiles = sourceFile.listFiles();
if(listFiles == null || listFiles.length == 0){
// ,
if(KeepDirStructure){
//
zos.putNextEntry(new ZipEntry(name + "/"));
// , copy
zos.closeEntry();
}
}else {
for (File file : listFiles) {
//
if (KeepDirStructure) {
// :file.getName() ,
// , :
compress(file, zos, name + "/" + file.getName(),KeepDirStructure);
} else {
compress(file, zos, file.getName(),KeepDirStructure);
}
}
}
}
}
public static void main(String[] args) throws Exception {
/** 1 */
FileOutputStream fos1 = new FileOutputStream(new File("E:\
ight\\ \\mytest01.zip"));
ZipInput.toZip("E:\
ight\\ \\mytest01", fos1,true);
/** 2 */
/* List fileList = new ArrayList();
fileList.add(new File("D:/Java/jdk1.7.0_45_64bit/bin/jar.exe"));
fileList.add(new File("D:/Java/jdk1.7.0_45_64bit/bin/java.exe"));
FileOutputStream fos2 = new FileOutputStream(new File("c:/mytest02.zip"));
ZipInput.toZip(fileList, fos2);*/
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 파일 읽 기 도구 클래스package com.lb.util; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; im...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.