java實現文件的壓縮和解壓縮

壓縮:java

package com.sichang.util;測試

import java.io.File;spa

import java.io.FileInputStream;.net

import java.io.FileOutputStream;對象

import java.io.IOException;ip

import java.io.InputStream;字符串

import java.util.zip.ZipEntry;get

import java.util.zip.ZipOutputStream;string


/**it

 * 壓縮文件

 * @author  Administrator

 *

 */

public class ZipOutputStreamUn {


// public static void main(String args[]) throws IOException {

//// test1();

// String AgoFileName="D:\\test";

// String AfterFilePath="D:\\test.zip";

// ManyFile(AgoFileName,AfterFilePath);

// }


/**

* 多文件壓縮

* AgoFileName 須要壓縮的文件路徑

* AfterFilePath 壓縮後的文件路徑

* String AgoFileName="D:\\test";

* String AfterFilePath="D:\\test.zip";

* ManyFile(AgoFileName,AfterFilePath);

* @throws  IOException

*/

public static void ManyFile(String AgoFileName, String AfterFilePath) throws IOException {

File inFile = new File(AgoFileName);

ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(AfterFilePath));

//zos.setComment("多文件處理");

zipFile(inFile, zos, "");

zos.close();

}

/**

* 單個文件壓縮

* @throws  IOException

 

public static void SingleFile() throws IOException {

// 壓縮後存儲路徑

ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("D:\\testZip.zip"), Charset.forName("GBK"));

//實例化一個名稱爲ab.txt的ZipEntry對象

ZipEntry entry = new ZipEntry("Service.txt");// 壓縮包裏面文件的名稱

//設置註釋

zos.setComment("zip測試for單個文件");

//把生成的ZipEntry對象加入到壓縮文件中,而以後往壓縮文件中寫入的內容都會放在這個ZipEntry對象裏面

zos.putNextEntry(entry);

InputStream is = new FileInputStream("D:\\Service.txt");

int len = 0;

while ((len = is.read()) != -1)

zos.write(len);

is.close();

zos.close();

}

*/

public static void zipFile(File inFile, ZipOutputStream zos, String dir) throws IOException {

if (inFile.isDirectory()) {

File[] files = inFile.listFiles();

for (File file:files)

zipFile(file, zos, dir + "\\" + inFile.getName());

} else {

String entryName = null;

if (!"".equals(dir))

entryName = dir + "\\" + inFile.getName();

else

entryName = inFile.getName();

ZipEntry entry = new ZipEntry(entryName);

zos.putNextEntry(entry);

InputStream is = new FileInputStream(inFile);

int len = 0;

while ((len = is.read()) != -1)

zos.write(len);

is.close();

}


}

}



解壓縮:

package com.sichang.util;


import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Enumeration;

import java.util.zip.ZipEntry;

import java.util.zip.ZipFile;

import java.util.zip.ZipInputStream;


/**

 * 解壓縮文件

 * @author  Administrator

 *

 */

public class ZipInputStreamUn {


// public static void main(String args[]) throws Exception {

// String AgoFileName="D:\\test.zip";

// String AfterFilePath="D:\\unpackTest\\";

// Unzip(AgoFileName,AfterFilePath);

// }

/**

* 這個方法有缺陷,不能使用!!!!!!!!!!!

* AgoFileName 須要解壓的文件路徑

* AfterFilePath 解壓後的文件路徑

* String AgoFileName="D:\\test.zip";

* String AfterFilePath="D:\\unpackTest\\";

* Unzip(AgoFileName,AfterFilePath);

* @throws  Exception

*/

public static void Unzip(String AgoFileName, String AfterFilePath) throws Exception{

System.out.println("開始解壓縮文件-----------------");

File file = new File(AgoFileName);//壓縮文件

ZipFile zipFile = new ZipFile(file);//實例化ZipFile,每個zip壓縮文件均可以表示爲一個ZipFile

//實例化一個Zip壓縮文件的ZipInputStream對象,能夠利用該類的getNextEntry()方法依次拿到每個ZipEntry對象

ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file));

ZipEntry zipEntry = null;

while ((zipEntry = zipInputStream.getNextEntry()) != null) {

String fileName = zipEntry.getName();

System.out.println(fileName);

File temp = new File(AfterFilePath + fileName);

if (!temp.getParentFile().exists())

temp.getParentFile().mkdirs();

OutputStream os = new FileOutputStream(temp);

//經過ZipFile的getInputStream方法拿到具體的ZipEntry的輸入流

InputStream is = zipFile.getInputStream(zipEntry);

int len = 0;

while ((len = is.read()) != -1)

os.write(len);

os.close();

is.close();

}

zipInputStream.close();

}

/**

* 解壓到指定目錄

* @param zipPath

* @param descDir

* @author isea533

*/

public static void unZipFiles(String zipPath,String descDir)throws IOException{

// 接收字符串後轉爲File

unZipFiles(new File(zipPath), descDir);

}

/**

* 解壓文件到指定目錄

 * AgoFileName 須要解壓的文件路徑

* AfterFilePath 解壓後的文件路徑

* String AgoFileName="D:\\test.zip";

* String AfterFilePath="D:\\unpackTest\\";

* Unzip(AgoFileName,AfterFilePath);

*/

@SuppressWarnings("rawtypes")

public static void unZipFiles(File zipFile,String descDir)throws IOException{

File pathFile = new File(descDir);

if(!pathFile.exists()){

pathFile.mkdirs();

}

ZipFile zip = new ZipFile(zipFile);

for(Enumeration entries = zip.entries();entries.hasMoreElements();){

ZipEntry entry = (ZipEntry)entries.nextElement();

String zipEntryName = entry.getName();

InputStream in = zip.getInputStream(entry);

String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;

//判斷路徑是否存在,不存在則建立文件路徑

File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));

if(!file.exists()){

file.mkdirs();

}

//判斷文件全路徑是否爲文件夾,若是是上面已經上傳,不須要解壓

if(new File(outPath).isDirectory()){

continue;

}

//輸出文件路徑信息

System.out.println(outPath);

OutputStream out = new FileOutputStream(outPath);

byte[] buf1 = new byte[1024];

int len;

while((len=in.read(buf1))>0){

out.write(buf1,0,len);

}

in.close();

out.close();

}

System.out.println("******************解壓完畢********************");

}

}

相關文章
相關標籤/搜索