java 壓縮和解壓縮Zip、Jar、Gzip文件實(shí)例代碼
我們經(jīng)常會(huì)使用WinZIP等壓縮軟件將文件進(jìn)行壓縮以方便傳輸。在java里面也提供了將文件進(jìn)行壓縮以減少傳輸時(shí)的數(shù)據(jù)量的類,可以很方便的將文件壓縮成ZIP、JAR、GZIP等形式,GZIP主要是在Linux系統(tǒng)下的壓縮文件。
下面主要講的就是ZIP形式的壓縮文件,而JAR、GZIP形式的壓縮文件也是類似的用法。
ZIP是一種很常見的壓縮形式,在java中要實(shí)現(xiàn)ZIP的壓縮主要用到的是java.util.zip這個(gè)包里面的類。主要有ZipFile、 ZipOutputStream、ZipInputStream和ZipEntry。ZipOutputStream是用來(lái)壓縮文件 的,ZipInputStream和ZipFile是用來(lái)解壓縮文件的,在壓縮和解壓縮的過程中,ZipEntry都會(huì)用到。在java的Zip壓縮文件 中,每一個(gè)子文件都是一個(gè)ZipEntry對(duì)象。
壓縮文件:
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipOutputStreamTest { public static void main(String args[]) throws IOException { test1(); test2(); } public static void test1() throws IOException { ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("D:\\testZip.zip"), Charset.forName("GBK")); //實(shí)例化一個(gè)名稱為ab.txt的ZipEntry對(duì)象 ZipEntry entry = new ZipEntry("ab.txt"); //設(shè)置注釋 zos.setComment("zip測(cè)試for單個(gè)文件"); //把生成的ZipEntry對(duì)象加入到壓縮文件中,而之后往壓縮文件中寫入的內(nèi)容都會(huì)放在這個(gè)ZipEntry對(duì)象里面 zos.putNextEntry(entry); InputStream is = new FileInputStream("D:\\ab.txt"); int len = 0; while ((len = is.read()) != -1) zos.write(len); is.close(); zos.close(); } public static void test2() throws IOException { File inFile = new File("D:\\test"); ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("D:\\test.zip"), Charset.forName("GBK")); zos.setComment("多文件處理"); zipFile(inFile, zos, ""); 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(); } } }
解壓縮文件:
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.nio.charset.Charset; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; public class ZipInputStreamTest { public static void main(String args[]) throws IOException { File file = new File("D:\\test.zip");//壓縮文件 ZipFile zipFile = new ZipFile(file);//實(shí)例化ZipFile,每一個(gè)zip壓縮文件都可以表示為一個(gè)ZipFile //實(shí)例化一個(gè)Zip壓縮文件的ZipInputStream對(duì)象,可以利用該類的getNextEntry()方法依次拿到每一個(gè)ZipEntry對(duì)象 ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file), Charset.forName("GBK")); ZipEntry zipEntry = null; while ((zipEntry = zipInputStream.getNextEntry()) != null) { String fileName = zipEntry.getName(); File temp = new File("D:\\unpackTest\\" + 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(); } }
以上就是對(duì)Java 壓縮和解壓縮文件的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對(duì)本站的支持!
相關(guān)文章
Mybatis配置之typeAlias標(biāo)簽的用法
這篇文章主要介紹了Mybatis配置之typeAlias標(biāo)簽的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07使用Java自帶的mail?API實(shí)現(xiàn)郵件發(fā)送功能全過程
電子郵件的應(yīng)用非常廣泛,例如在某網(wǎng)站注冊(cè)了一個(gè)賬戶,自動(dòng)發(fā)送一封歡迎郵件,通過郵件找回密碼,自動(dòng)批量發(fā)送活動(dòng)信息等,下面這篇文章主要給大家介紹了關(guān)于如何使用Java自帶的mail?API實(shí)現(xiàn)郵件發(fā)送功能的相關(guān)資料,需要的朋友可以參考下2023-04-04spring?jpa設(shè)置多個(gè)主鍵遇到的小坑及解決
這篇文章主要介紹了spring?jpa設(shè)置多個(gè)主鍵遇到的小坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06spring中12種@Transactional的失效場(chǎng)景(小結(jié))
日常我們進(jìn)行業(yè)務(wù)開發(fā)時(shí),基本上使用的都是聲明式事務(wù),即為使用@Transactional注解的方式,本文主要介紹了spring中12種@Transactional的失效場(chǎng)景,感興趣的小伙伴們可以參考一下2022-01-01