package com.io2.homework;
成都創(chuàng)新互聯(lián)是一家專業(yè)提供呼瑪企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、成都做網(wǎng)站、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為呼瑪眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
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);
//進(jìn)行遞歸調(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();
}
}
GZIP壓縮格式簡介在JDK API中 同樣定義了多種類型用于創(chuàng)建和解除GZIP壓縮格式數(shù)據(jù)文件的通用對象和方法 用于基于JDK編寫GZIP壓縮數(shù)據(jù)管理程序 GZIP壓縮格式是在Sun Solaris操作系統(tǒng)中廣泛采用的壓縮數(shù)據(jù)格式 由于在數(shù)據(jù)壓縮過程中可以采用多種類型的壓縮算法 因此 壓縮文件的壓縮比很高 另外 在創(chuàng)建的壓縮文件中 定義了用于表述時(shí)間和文件屬主的時(shí)戳(Time Stamp) 可以使文件方便地在網(wǎng)絡(luò)中傳輸和交換 GZIP壓縮數(shù)據(jù)文件由一系列的數(shù)字構(gòu)成 而各數(shù)字對應(yīng)如下描述壓縮文件信息的字段 ID 缺省值 用于標(biāo)識GZIP壓縮格式 ID 缺省值 用于標(biāo)識GZIP壓縮格式 CM 采用的壓縮方法 其值為 ~ 是保留值 標(biāo)識采用 deflate 壓縮方法 FLG 用于標(biāo)識各占用位的標(biāo)志 MTIME 記錄了最近修改時(shí)間 XFL 用于標(biāo)識采用壓縮算法的選項(xiàng) OS 定義了操作系統(tǒng)類型 XLEN 定義了附加信息段的長度 M 壓縮文件說明信息 CRC 記錄了CRC 算法采用的循環(huán)冗余校驗(yàn)值 上述信息完整描述了GZIP壓縮格式數(shù)據(jù) 當(dāng)然 基于JDK開發(fā)的壓縮數(shù)據(jù)管理程序 不需要明確知道上述壓縮數(shù)據(jù)定義格式 只需要?jiǎng)?chuàng)建相應(yīng)的管理對象并調(diào)用這些對象中定義的方法即可 JDK API中ZIP壓縮格式支持對象GZIP壓縮格式是在JDK API中定義支持的另外一種數(shù)據(jù)壓縮格式 由上面介紹的GZIP格式數(shù)據(jù)壓縮方法可知 GZIP壓縮格式具有更大的壓縮比 因此 在Unix操作系統(tǒng)中 這種類型的數(shù)據(jù)壓縮形式的應(yīng)用十分普及 與JDK API對ZIP壓縮格式的支持不同 在JDK API中 只定義了GZIPInputStream和GZIPOutputStream兩種類型的流(Stream)對象 用于在基于流的數(shù)據(jù)傳輸過程中實(shí)現(xiàn)數(shù)據(jù)壓縮 這兩個(gè)對象的繼承定義結(jié)構(gòu)如下所示 java lang Object|+ java io InputStream|+ java io FilterInputStream|+ java util zip InflaterInputStream|+ java util zip GZIPInputStream(java util zip GZIPOutputStream)以采用GZIP格式進(jìn)行數(shù)據(jù)輸入處理GZIPInputStream對象為例 由上述對象的繼承定義結(jié)構(gòu)可以看出 該對象繼承了InflaterInputStream流對象 需要說明的是 在ZIP壓縮包中 定義了Inflater和Deflater兩個(gè)對象 用于基于ZLIB壓縮庫實(shí)現(xiàn)多種格式的數(shù)據(jù)壓縮和解壓縮 因此 InflaterInputStream流對象的作用是采用ZLIB庫作為數(shù)據(jù)壓縮管理的引擎 而GZIPInputStream對象則進(jìn)一步將流的數(shù)據(jù)加工進(jìn)行細(xì)化 用于讀取GZIP格式的壓縮數(shù)據(jù) 同理 GZIPOutputStream對象用于創(chuàng)建GZIP格式的壓縮數(shù)據(jù)文件 下面 將對兩個(gè)對象的定義內(nèi)容進(jìn)行說明 ●GZIPInputStream對象定義結(jié)構(gòu) java util zip GZIPInputStream靜態(tài)成員變量 protected CRC crc 用于說明采用的數(shù)據(jù)壓縮算法為CRC protected boolean eos 說明輸入流對象結(jié)束讀取輸入數(shù)據(jù) 構(gòu)造方法 GZIPInputStream(InputStream in) 采用默認(rèn)的緩沖區(qū)字節(jié)數(shù)創(chuàng)建輸入流對象 GZIPInputStream(InputStream in int size) 創(chuàng)建由整數(shù)類型變量size指定緩沖區(qū)字節(jié)數(shù)的輸入流對象 成員方法 該對象只定義了如下兩個(gè)成員方法 void close() 關(guān)閉輸入流對象 int read(byte[] buf int off int len) 讀取輸入流的數(shù)據(jù)到buf字節(jié)數(shù)組中 ●GZIPOutputStream對象定義結(jié)構(gòu) java util zip GZIPOutputStream靜態(tài)成員變量 protected CRC crc 用于說明采用的數(shù)據(jù)壓縮算法為CRC 構(gòu)造方法 GZIPOutputStream(OutputStream out) 采用默認(rèn)的緩沖區(qū)字節(jié)數(shù)創(chuàng)建輸出流對象 GZIPOutputStream(OutputStream out int size) 創(chuàng)建由整數(shù)類型變量size指定緩沖區(qū)字節(jié)數(shù)的輸出流對象 成員方法 void close() 關(guān)閉輸出流對象 void finish() 結(jié)束數(shù)據(jù)輸出 但不關(guān)閉輸出流對象 void write(byte[] buf int off int len) 將字節(jié)數(shù)組buf中的內(nèi)容壓縮輸出到輸出流對象中 創(chuàng)建GZIP壓縮格式文件實(shí)例經(jīng)過前面對JDK API中創(chuàng)建GZIP壓縮格式文件的相關(guān)對象的結(jié)構(gòu) 成員方法定義形式的說明 讀者一定會問如何應(yīng)用這些對象和對象中定義的成員方法呢?請讀者看下面的實(shí)例代碼 //ZipDemo javaimport java io *; import java util zip *; public class GZIPDemo { public static void main(String[] args) { if (args length != ) { System out println("Usage:java GZIPDemo SourceFile DestnFile" + args length); System exit( ); } try { int number; //打開需壓縮文件作為文件輸入流 FileInputStream fin = new FileInputStream(args[ ]); //建立壓縮文件輸出流FileOutputStream fout=new FileOutputStream(args[ ]); //建立GZIP壓縮輸出流 GZIPOutputStream gzout=new GZIPOutputStream(fout); //設(shè)定讀入緩沖區(qū)尺寸byte[] buf=new byte[ ]; while ((number = fin read(buf)) != ) gzout write(buf number); gzout close(); fout close(); fin close(); }catch(IOException e) { System out println(e); } } }上面的程序用于將命令行中指定的文件SourceFile進(jìn)行壓縮 創(chuàng)建GZIP格式的壓縮文件DestnFile 在該程序的實(shí)現(xiàn)代碼中 首先創(chuàng)建用于進(jìn)行文件輸入和輸出的FileInputStream和FileOutputStream對象 并以FileOutputStream對象實(shí)例為參數(shù)創(chuàng)建GZIPOutputStream對象實(shí)例 從而為創(chuàng)建GZIP格式壓縮文件建立數(shù)據(jù)流基礎(chǔ) 在隨后的代碼中 利用FileInputStream對象中定義的read方法 從源文件中讀取待壓縮文件的內(nèi)容 同時(shí)利用GZIPOutputStream對象中定義的write方法將壓縮后的數(shù)據(jù)寫出到輸出文件中 從而實(shí)現(xiàn)數(shù)據(jù)文件的GZIP格式壓縮處理 在Java中創(chuàng)建GZIP格式壓縮文件的方法很簡單 并且利用WinZip WinRAR等類型的壓縮管理軟件均能夠打開創(chuàng)建的GZIP格式的壓縮文件 那么 如何利用JDK API中定義的對象將被壓縮的文件解壓縮呢?請讀者看下一節(jié)的內(nèi)容 GZIP格式文件解壓縮實(shí)例下面的程序用于將利用JDK API中定義對象的成員方法 將GZIP格式壓縮文件進(jìn)行解壓縮 從而恢復(fù)壓縮原始文件 //UnGZIPDemo javaimport java io *; import java util zip *; public class UnGZIPDemo { public static void main(String[] args) { if (args length != ) { System out println("Usage:java UnGZIPDemo GZIPFile DestnFile"); System exit( ); } try { int number;//建立GZIP壓縮文件輸入流 FileInputStream fin=new FileInputStream(args[ ]); //建立GZIP解壓工作流 GZIPInputStream gzin=new GZIPInputStream(fin); //建立解壓文件輸出流 FileOutputStream fout=new FileOutputStream(args[ ]); //設(shè)定讀入緩沖區(qū)尺寸byte[] buf=new byte[ ]; while ((nnumber=gzin read(buf buf length)) != ) fout write(buf nnumber); gzin close(); fout close(); fin close(); }catch(IOException e) { System out println(e); } } }在GZIP格式壓縮文件解壓縮程序代碼中 仍然首先創(chuàng)建FileInputStream和FileOutputStream對象 并基于創(chuàng)建的FileInputStream對象創(chuàng)建GZIPInputStream對象 在隨后的代碼中 調(diào)用GZIPInputStream對象中定義的read方法 在從壓縮文件中讀取數(shù)據(jù)內(nèi)容并進(jìn)行解壓縮處理后 將解除壓縮后的數(shù)據(jù)內(nèi)容利用文件輸出流對象進(jìn)行輸出 從而實(shí)現(xiàn)數(shù)據(jù)文件的解壓縮處理 小 lishixinzhi/Article/program/Java/hx/201311/27034
package?com.javatest.techzero.gui;??
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileOutputStream;
import?java.io.InputStream;
import?java.io.OutputStream;
import?java.util.zip.ZipEntry;
import?java.util.zip.ZipFile;
import?java.util.zip.ZipInputStream;?
public?class?ZipFileDemo?{
@SuppressWarnings("resource")
public?static?void?main(String?args[])?throws?Exception?{
File?file?=?new?File("d:"?+?File.separator?+?"test.zip");
File?outFile?=?null;
ZipFile?zipFile?=?new?ZipFile(file);
ZipInputStream?zipInput?=?new?ZipInputStream(new?FileInputStream(file));
ZipEntry?entry?=?null;
InputStream?input?=?null;
OutputStream?out?=?null;
while?((entry?=?zipInput.getNextEntry())?!=?null)?{
System.out.println("開始解壓縮"?+?entry.getName()?+?"文件。。。");
outFile?=?new?File("d:"?+?File.separator?+?entry.getName());
if?(!outFile.getParentFile().exists())?{
outFile.getParentFile().mkdir();
}
if?(!outFile.exists())?{
outFile.createNewFile();
}
input?=?zipFile.getInputStream(entry);
out?=?new?FileOutputStream(outFile);
int?temp?=?0;
while?((temp?=?input.read())?!=?-1)?{
SPAN?style="WHITE-SPACE:?pre"?/SPAN//System.out.println(temp);
out.write(temp);
}
input.close();
out.close();
}
System.out.println("Done!");
}
}
僅供參考
用java代碼壓縮應(yīng)用到程序了,代碼一般是比較復(fù)雜的,對pdf文件的mate標(biāo)簽優(yōu)化,這類標(biāo)簽包括三類,pdf文件不是網(wǎng)頁就是個(gè)文件,何況我們可以用pdf壓縮工具壓縮,下面有個(gè)解決方法,樓主可以做參照。
1:點(diǎn)擊打開工具,打開主頁面上有三個(gè)功能進(jìn)行選擇,我們選擇pdf文件壓縮。
2:這這個(gè)頁面中我們選擇pdf文件在這里打開,點(diǎn)擊“添加文件”按鈕將文件添加進(jìn)來。
3:然后在頁面中點(diǎn)擊“開始壓縮”就可以開始壓縮文件了。
4:壓縮完成的文件頁面會顯示已經(jīng)完成。
再 windows下通過 cmd命令執(zhí)行解壓縮沒問題,但是通過 java代碼去執(zhí)行不能解壓是為什么?我在開始運(yùn)行中輸入命令: cmd/ c rar. exe x- y d:\\ auto. rar d:\\----上面命令可以解壓成功,但是通過下面 java代碼不能實(shí)現(xiàn)解壓縮功能,請指點(diǎn)。主要代碼: java. lang. Runtime. getRuntime(). exec(" cmd/ c rar. exe x- y d:\\ auto. rar d:\\");
再 windows下通過 cmd命令執(zhí)行解壓縮沒問題,但是通過 java代碼去執(zhí)行不能解壓是為什么?我在開始運(yùn)行中輸入命令: cmd/ c rar. exe x- y d:\\ auto. rar d:\\----上面命令可以解壓成功,但是通過下面 java代碼不能實(shí)現(xiàn)解壓縮功能,請指點(diǎn)。主要代碼: java. lang. Runtime. getRuntime(). exec(" cmd/ c rar. exe x- y d:\\ auto. rar d:\\");
本文標(biāo)題:java壓縮軟件代碼 Java壓縮
文章地址:http://m.rwnh.cn/article2/doocgoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、定制開發(fā)、企業(yè)建站、網(wǎng)站排名、App設(shè)計(jì)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)