javazip解壓代碼 java解壓縮包

java 以流的形式解壓帶密碼的zip

可以使用 Runtime 直接調(diào)用 winRar 的命令行命令來解壓縮

在賀蘭等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需求定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,成都營銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站制作,賀蘭網(wǎng)站建設(shè)費用合理。

注意:

1、winRar命令使用,在dos下輸入 unrar 就可以看到全部的命令說明。該命令在winRar的安裝目錄下

2、winRar命令行命令的路徑問題,也就是path。要么加入系統(tǒng)變量path中,要么在winRar的安裝目錄下執(zhí)行程序

以下是程序代碼,解壓 test.rar 到當(dāng)前目錄下,密碼123

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class TestRunTime {

public static void main(String[] args) {

Runtime run = Runtime.getRuntime();

try {

Process p = run.exec("unrar e test.rar -p123");//執(zhí)行解壓縮命令

BufferedInputStream in = new BufferedInputStream(p.getInputStream());

BufferedReader inBr = new BufferedReader(new InputStreamReader(in));

String lineStr;

while ((lineStr = inBr.readLine()) != null)

System.out.println(lineStr);

// 檢查命令是否執(zhí)行失敗。

if (p.waitFor() != 0) {

if (p.exitValue() == 1)// p.exitValue()==0表示正常結(jié)束,1:非正常結(jié)束

System.err.println("命令執(zhí)行失敗!");

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

java如何直接解壓zip格式二進制流

Java代碼

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.zip.ZipEntry;

import java.util.zip.ZipInputStream;

import java.util.zip.ZipOutputStream;

class ZipTest {

// 壓縮

public static void zip(String zipFileName, String inputFile)

throws Exception {

File f = new File(inputFile);

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(

zipFileName));

zip(out, f, f.getName());

System.out.println("zip done");

out.close();

求JAVA解壓縮文件目錄的源代碼

package?com.io2.homework;

import?java.io.File;

import?java.io.FileInputStream;

import?java.io.FileNotFoundException;

import?java.io.FileOutputStream;

import?java.io.IOException;

import?java.util.zip.ZipEntry;

import?java.util.zip.ZipOutputStream;

/*壓縮文件夾*/

public?class?MyMultipleFileZip?

{

private?String?currentZipFilePath?=?"F:/MyZip.zip";

private?String?sourceFilePath;

private?ZipOutputStream?zos;

private?FileInputStream?fis;

public?MyMultipleFileZip(String?sourceFilePath)?

{

try

{

this.sourceFilePath?=?sourceFilePath;

zos?=?new?ZipOutputStream(new?FileOutputStream(currentZipFilePath));

//設(shè)定文件壓縮級別

zos.setLevel(9);

}?catch?(FileNotFoundException?e)?

{

e.printStackTrace();

}

}

//?在當(dāng)前條目中寫入具體內(nèi)容

public?void?writeToEntryZip(String?filePath)?

{

try

{

fis?=?new?FileInputStream(filePath);

}?catch?(FileNotFoundException?e1)?

{

e1.printStackTrace();

}

byte[]?buff?=?new?byte[1024];

int?len?=?0;

try?

{

while?((len?=?fis.read(buff))?!=?-1)

{

zos.write(buff,?0,?len);

}

}?catch?(IOException?e)?

{

e.printStackTrace();

}finally

{

if?(fis?!=?null)

try?

{

fis.close();

}?catch?(IOException?e)?

{

e.printStackTrace();

}

}

}

//?添加文件條目

public?void?addFileEntryZip(String?fileName)?

{

try?

{

zos.putNextEntry(new?ZipEntry(fileName));

}?catch?(IOException?e)?

{

e.printStackTrace();

}

}

public?void?addDirectoryEntryZip(String?directoryName)

{

try?

{

zos.putNextEntry(new?ZipEntry(directoryName?+?"/"));

}?catch?(IOException?e)

{

e.printStackTrace();

}

}

//?遍歷文件夾

public?void?listMyDirectory(String?filePath)

{

File?f?=?new?File(filePath);

File[]?files?=?f.listFiles();

if(files!=null)

{

for?(File?currentFile?:?files)?

{

//?設(shè)置條目名稱(此步驟非常關(guān)鍵)

String?entryName=?currentFile.getAbsolutePath().split(":")[1].substring(1);

//?獲取文件物理路徑

String?absolutePath?=?currentFile.getAbsolutePath();

if?(currentFile.isDirectory())?

{

addDirectoryEntryZip(entryName);

//進行遞歸調(diào)用

listMyDirectory(absolutePath);

}

else?

{

addFileEntryZip(entryName);

writeToEntryZip(absolutePath);

}

}

}

}

//?主要流程

public?void?mainWorkFlow()

{

listMyDirectory(this.sourceFilePath);

if(zos!=null)

try?

{

zos.close();

}?catch?(IOException?e)?

{

e.printStackTrace();

}

}

public?static?void?main(String[]?args)?

{

new?MyMultipleFileZip("F:/fountainDirectory").mainWorkFlow();

}

}

怎樣用java快速實現(xiàn)zip文件的壓縮解壓縮

package?zip;

import?java.io.BufferedInputStream;

import?java.io.BufferedOutputStream;

import?java.io.File;

import?java.io.FileInputStream;

import?java.io.FileOutputStream;

import?java.util.Enumeration;

import?java.util.zip.CRC32;

import?java.util.zip.CheckedOutputStream;

import?java.util.zip.ZipEntry;

import?java.util.zip.ZipFile;

import?java.util.zip.ZipOutputStream;

import?org.apache.commons.lang3.StringUtils;

public?class?ZipUtil?{

/**

?*?遞歸壓縮文件夾

?*?@param?srcRootDir?壓縮文件夾根目錄的子路徑

?*?@param?file?當(dāng)前遞歸壓縮的文件或目錄對象

?*?@param?zos?壓縮文件存儲對象

?*?@throws?Exception

?*/

private?static?void?zip(String?srcRootDir,?File?file,?ZipOutputStream?zos)?throws?Exception

{

if?(file?==?null)?

{

return;

}

//如果是文件,則直接壓縮該文件

if?(file.isFile())

{

int?count,?bufferLen?=?1024;

byte?data[]?=?new?byte[bufferLen];

//獲取文件相對于壓縮文件夾根目錄的子路徑

String?subPath?=?file.getAbsolutePath();

int?index?=?subPath.indexOf(srcRootDir);

if?(index?!=?-1)?

{

subPath?=?subPath.substring(srcRootDir.length()?+?File.separator.length());

}

ZipEntry?entry?=?new?ZipEntry(subPath);

zos.putNextEntry(entry);

BufferedInputStream?bis?=?new?BufferedInputStream(new?FileInputStream(file));

while?((count?=?bis.read(data,?0,?bufferLen))?!=?-1)?

{

zos.write(data,?0,?count);

}

bis.close();

zos.closeEntry();

}

//如果是目錄,則壓縮整個目錄

else?

{

//壓縮目錄中的文件或子目錄

File[]?childFileList?=?file.listFiles();

for?(int?n=0;?nchildFileList.length;?n++)

{

childFileList[n].getAbsolutePath().indexOf(file.getAbsolutePath());

zip(srcRootDir,?childFileList[n],?zos);

}

}

}

/**

?*?對文件或文件目錄進行壓縮

?*?@param?srcPath?要壓縮的源文件路徑。如果壓縮一個文件,則為該文件的全路徑;如果壓縮一個目錄,則為該目錄的頂層目錄路徑

?*?@param?zipPath?壓縮文件保存的路徑。注意:zipPath不能是srcPath路徑下的子文件夾

?*?@param?zipFileName?壓縮文件名

?*?@throws?Exception

?*/

public?static?void?zip(String?srcPath,?String?zipPath,?String?zipFileName)?throws?Exception

{

if?(StringUtils.isEmpty(srcPath)?||?StringUtils.isEmpty(zipPath)?||?StringUtils.isEmpty(zipFileName))

{

throw?new?ParameterException(ICommonResultCode.PARAMETER_IS_NULL);

}

CheckedOutputStream?cos?=?null;

ZipOutputStream?zos?=?null;

try

{

File?srcFile?=?new?File(srcPath);

//判斷壓縮文件保存的路徑是否為源文件路徑的子文件夾,如果是,則拋出異常(防止無限遞歸壓縮的發(fā)生)

if?(srcFile.isDirectory()??zipPath.indexOf(srcPath)!=-1)?

{

throw?new?ParameterException(ICommonResultCode.INVALID_PARAMETER,?"zipPath?must?not?be?the?child?directory?of?srcPath.");

}

//判斷壓縮文件保存的路徑是否存在,如果不存在,則創(chuàng)建目錄

File?zipDir?=?new?File(zipPath);

if?(!zipDir.exists()?||?!zipDir.isDirectory())

{

zipDir.mkdirs();

}

//創(chuàng)建壓縮文件保存的文件對象

String?zipFilePath?=?zipPath?+?File.separator?+?zipFileName;

File?zipFile?=?new?File(zipFilePath);

if?(zipFile.exists())

{

//檢測文件是否允許刪除,如果不允許刪除,將會拋出SecurityException

SecurityManager?securityManager?=?new?SecurityManager();

securityManager.checkDelete(zipFilePath);

//刪除已存在的目標文件

zipFile.delete();

}

cos?=?new?CheckedOutputStream(new?FileOutputStream(zipFile),?new?CRC32());

zos?=?new?ZipOutputStream(cos);

//如果只是壓縮一個文件,則需要截取該文件的父目錄

String?srcRootDir?=?srcPath;

if?(srcFile.isFile())

{

int?index?=?srcPath.lastIndexOf(File.separator);

if?(index?!=?-1)

{

srcRootDir?=?srcPath.substring(0,?index);

}

}

//調(diào)用遞歸壓縮方法進行目錄或文件壓縮

zip(srcRootDir,?srcFile,?zos);

zos.flush();

}

catch?(Exception?e)?

{

throw?e;

}

finally?

{

try

{

if?(zos?!=?null)

{

zos.close();

}

}

catch?(Exception?e)

{

e.printStackTrace();

}

}

}

/**

?*?解壓縮zip包

?*?@param?zipFilePath?zip文件的全路徑

?*?@param?unzipFilePath?解壓后的文件保存的路徑

?*?@param?includeZipFileName?解壓后的文件保存的路徑是否包含壓縮文件的文件名。true-包含;false-不包含

?*/

@SuppressWarnings("unchecked")

public?static?void?unzip(String?zipFilePath,?String?unzipFilePath,?boolean?includeZipFileName)?throws?Exception

{

if?(StringUtils.isEmpty(zipFilePath)?||?StringUtils.isEmpty(unzipFilePath))

{

throw?new?ParameterException(ICommonResultCode.PARAMETER_IS_NULL);

}

File?zipFile?=?new?File(zipFilePath);

//如果解壓后的文件保存路徑包含壓縮文件的文件名,則追加該文件名到解壓路徑

if?(includeZipFileName)

{

String?fileName?=?zipFile.getName();

if?(StringUtils.isNotEmpty(fileName))

{

fileName?=?fileName.substring(0,?fileName.lastIndexOf("."));

}

unzipFilePath?=?unzipFilePath?+?File.separator?+?fileName;

}

//創(chuàng)建解壓縮文件保存的路徑

File?unzipFileDir?=?new?File(unzipFilePath);

if?(!unzipFileDir.exists()?||?!unzipFileDir.isDirectory())

{

unzipFileDir.mkdirs();

}

//開始解壓

ZipEntry?entry?=?null;

String?entryFilePath?=?null,?entryDirPath?=?null;

File?entryFile?=?null,?entryDir?=?null;

int?index?=?0,?count?=?0,?bufferSize?=?1024;

byte[]?buffer?=?new?byte[bufferSize];

BufferedInputStream?bis?=?null;

BufferedOutputStream?bos?=?null;

ZipFile?zip?=?new?ZipFile(zipFile);

EnumerationZipEntry?entries?=?(EnumerationZipEntry)zip.entries();

//循環(huán)對壓縮包里的每一個文件進行解壓

while(entries.hasMoreElements())

{

entry?=?entries.nextElement();

//構(gòu)建壓縮包中一個文件解壓后保存的文件全路徑

entryFilePath?=?unzipFilePath?+?File.separator?+?entry.getName();

//構(gòu)建解壓后保存的文件夾路徑

index?=?entryFilePath.lastIndexOf(File.separator);

if?(index?!=?-1)

{

entryDirPath?=?entryFilePath.substring(0,?index);

}

else

{

entryDirPath?=?"";

}

entryDir?=?new?File(entryDirPath);

//如果文件夾路徑不存在,則創(chuàng)建文件夾

if?(!entryDir.exists()?||?!entryDir.isDirectory())

{

entryDir.mkdirs();

}

//創(chuàng)建解壓文件

entryFile?=?new?File(entryFilePath);

if?(entryFile.exists())

{

//檢測文件是否允許刪除,如果不允許刪除,將會拋出SecurityException

SecurityManager?securityManager?=?new?SecurityManager();

securityManager.checkDelete(entryFilePath);

//刪除已存在的目標文件

entryFile.delete();

}

//寫入文件

bos?=?new?BufferedOutputStream(new?FileOutputStream(entryFile));

bis?=?new?BufferedInputStream(zip.getInputStream(entry));

while?((count?=?bis.read(buffer,?0,?bufferSize))?!=?-1)

{

bos.write(buffer,?0,?count);

}

bos.flush();

bos.close();

}

}

public?static?void?main(String[]?args)?

{

String?zipPath?=?"d:\\ziptest\\zipPath";

String?dir?=?"d:\\ziptest\\rawfiles";

String?zipFileName?=?"test.zip";

try

{

zip(dir,?zipPath,?zipFileName);

}?

catch?(Exception?e)

{

e.printStackTrace();

}

String?zipFilePath?=?"D:\\ziptest\\zipPath\\test.zip";

String?unzipFilePath?=?"D:\\ziptest\\zipPath";

try?

{

unzip(zipFilePath,?unzipFilePath,?true);

}

catch?(Exception?e)

{

e.printStackTrace();

}

}

}

文章名稱:javazip解壓代碼 java解壓縮包
分享鏈接:http://bm7419.com/article34/ddccope.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機網(wǎng)頁設(shè)計公司、移動網(wǎng)站建設(shè)、用戶體驗、動態(tài)網(wǎng)站、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)