java解壓z文件-九游会j9娱乐平台
對於zip文件,java有自帶類庫java.util.zip;可是要想解壓rar文件只能靠第三方類庫,我試過兩個:com.github.junrar和de.innosystec.unrar,前者解壓時可能會出現crcerror,後者pom配置時報錯;利用cmd命令調用winrar進行解壓,無疑方便快捷很多。
調用cmd命令
public static boolean exe(string cmd) {
runtime runtime = runtime.getruntime(); try {
process p = runtime.exec(cmd);
bufferedreader reader = new bufferedreader(new inputstreamreader(p.getinputstream(),"gbk"));
string line = reader.readline(); while(line!=null) {
logger.info(line);
line = reader.readline();
}
reader.close(); if(p.waitfor()!=0) { return false;
}
} catch (ioexception e) { // todo auto-generated catch block
e.printstacktrace();
} catch (interruptedexception e) { // todo auto-generated catch block
e.printstacktrace();
} return true;
}
首先利用runtime.exec()執行指令,得到process,從process.getinputstream()中獲取回顯字元並列印,列印回顯時可能會出現中文亂碼,這個和操作系統編碼有關,我這里是gbk編碼,所以在new inputstreamreader時加入了編碼參數」gbk「
命令行字元串
如果需要調用cmd命令,如cd等,可寫」cmd c cd 目錄」。對於直接調用exe執行,則可以寫成」exe文件絕對路徑 參數」,在命令行字元串中,含有空格的路徑或者字元串應該再加上引號,即」」exe文件絕對路徑」 」參數」「
winrar調用
我這里安裝目錄是c:/program files/winrar,將d:1.rar 解壓到d:,則寫成」」c:/program files/winrar/unrar.exe」 x -y d:/1.rar d:/」,x代表絕對路徑解壓,-y表示全部確定;壓縮的命令如下:「」c:/program files/winrar/rar.exe」 a -ep1 d:2.rar d:源目錄」,a表示添加文件到壓縮文件,-ep1表示排除基本目錄,如d:winrar ar這個目錄,如果沒有-ep1那麼壓縮包中會出現winrar目錄路徑,而加了之後就只將當前目錄打包,只有rar目錄
b. java瑙e帇90鍏嗗ぇ灝弞ip闇瑕佸氫箙
瑙e帇涓涓90鍏嗗ぇ灝忕殑zip鏂囦歡鎵闇鐨勬椂闂村彇鍐充簬澶氱嶅洜緔狅紝鍖呮嫭紜浠舵ц兘銆佹枃浠剁郴緇熼熷害銆佸帇緙╃畻娉曠瓑銆備竴鑸鎯呭喌涓嬶紝瑙e帇閫熷害杈冨揩錛岀壒鍒鏄鍦ㄧ幇浠h$畻鏈轟笂銆
濡傛灉浣犵殑璁$畻鏈洪厤緗杈冨ソ錛屽寘鎷澶勭悊鍣ㄩ熷害蹇銆佸ぇ鍐呭瓨瀹歸噺銆佸揩閫熺‖鐩樺瓨鍌ㄥ櫒絳夛紝閭d箞瑙e帇90鍏嗗ぇ灝忕殑zip鏂囦歡鍙鑳藉彧闇瑕佸嚑縐掗挓鍒板嚑鍒嗛挓鐨勬椂闂淬
鐒惰岋紝濡傛灉浣犵殑璁$畻鏈洪厤緗杈冧綆錛屽勭悊鍣ㄩ熷害鎱銆佸唴瀛樺歸噺杈冨皬銆佷綆閫熺‖鐩樼瓑錛岄偅涔堣в鍘嬫椂闂村彲鑳戒細鏇撮暱錛屽彲鑳介渶瑕佸嚑鍒嗛挓鍒板嚑鍗佸垎閽熴
鍊煎緱娉ㄦ剰鐨勬槸錛岃繖鍙鏄涓涓澶ц嚧鐨勪及璁★紝瀹為檯鎯呭喌鍙鑳藉洜涓浜鴻$畻鏈洪厤緗銆佸帇緙╂枃浠舵湰韜鐨勭粨鏋勫拰綆楁硶絳夊洜緔犺屾湁鎵涓嶅悓銆
濡傛灉浣犲凡緇忔湁浜嗕竴涓獄ip鏂囦歡錛屼綘鍙浠ュ皾璇曡в鍘嬪畠錛岀劧鍚庨氳繃瑙傚療瑙e帇榪囩▼涓鐨勮繘搴︽潯鎴栬℃椂鍣ㄦ潵浜嗚в瀹為檯瑙e帇鎵闇鐨勬椂闂淬傚傛灉浣犺繕娌℃湁zip鏂囦歡錛屼綘涔熷彲浠ュ皾璇曞壋寤轟竴涓綾諱技澶у皬鐨剒ip鏂囦歡錛岀劧鍚庤繘琛岃в鍘嬩互嫻嬭瘯鎵闇鐨勬椂闂淬
c. java解壓zip文件
import java.io.ioexception;
import java.util.enumeration;
import java.util.zip.zipentry;
/**
* 獲得zip文件里的所有文件
* @author administrator
*
*/
public class zipfile {
public zipfile() throws ioexception
{
java.util.zip.zipfile zf = new java.util.zip.zipfile("e:/java/project.zip");
enumeration e = zf.entries();
while(e.hasmoreelements())
{
zipentry ze = (zipentry) e.nextelement();
if(!ze.isdirectory())
system.out.println(new string(ze.getname().getbytes("iso-8859-1"), "gb2312"));
}
}
public static void main(string[] args) {
try {
new zipfile();
} catch (ioexception e) {
e.printstacktrace();
}
}
}
d. java中將一個文件夾下所有的文件壓縮成一個文件,然後,解壓到指定目錄.
import java.io.*;
import java.util.zip.*;
public class compressd {
// 緩沖
static byte[] buffer = new byte[2048];
public static void main(string[] args) throws exception {
// 來源
file inputdir = new file("c:\\compresstest\\");
// 目標
fileoutputstream fos = new fileoutputstream("c:\\compresstest.zip");
// 過濾
zipoutputstream zos = new zipoutputstream(fos);
// 壓縮
zip(inputdir.listfiles(), "", zos);
// 關閉
zos.close();
}
private static void zip(file[] files, string basefolder, zipoutputstream zos)
throws exception {
// 輸入
fileinputstream fis = null;
// 條目
zipentry entry = null;
// 數目
int count = 0;
for (file file : files) {
if (file.isdirectory()) {
// 遞歸
zip(file.listfiles(), file.getname() file.separator, zos);
continue;
}
entry = new zipentry(basefolder file.getname());
// 加入
zos.putnextentry(entry);
fis = new fileinputstream(file);
// 讀取
while ((count = fis.read(buffer, 0, buffer.length)) != -1)
// 寫入
zos.write(buffer, 0, count);
}
}
}
e. java 解壓zip中文文件保存
用jdk自帶的zip工具做壓縮時,對中文支持不是很好。
建議使用ant.jar中的壓縮和解壓縮工具
f. java解壓zip文件
不好意思搞反了,這樣就更簡單了。
用這個構造方法zipinputstream(inputstream in);接收傳過來的流,然後用這個類的getnextentry()方法解壓縮文件,最後調用read(byte[] b, int off, int len)方法將數據寫入byte數組。
zipinputstream zin = new zipinputstream(in);
zipentry entry = null;
while((entry=zin.getnextentry())!=null){
if(entry.isdirectory()||entry.getname().equals("..\\"))
continue;
bufferedinputstream bin = new bufferedinputstream(zin);
byte[] buf = new byte[];
bin.read(buf,0,1);
}