亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中zip的壓縮和解壓縮的實現(xiàn)代碼

 更新時間:2021年02月25日 08:37:41   作者:布禾  
這篇文章主要介紹了Java中zip的壓縮和解壓縮的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

在Java中可以使用ZipOutputStream和ZipInputStream來實現(xiàn)zip的壓縮和解壓縮操作,另外使用FileSystem也可以用來實現(xiàn)zip的解壓縮,下面將介紹這幾種方式,直接上代碼。

zip壓縮

待壓縮文件目錄結(jié)構(gòu):

每個zip文件項都要對應(yīng)一個ZipEntry,然后通過ZipOutputStream的putNextEntry方法開始寫入一個新的zip文件項,將文件數(shù)據(jù)發(fā)送到zip輸出流中,完成后再調(diào)用closeEntry方法。

@Test
public void testCompressByZip() {
	try (
		//指定壓縮完成后zip文件的存儲路徑
		ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream("F:\\myFavorites.zip"))
	)
	{
		//待壓縮文件/目錄所在的目錄
		File fileFolder = new File("F:\\我的收藏");
		//獲取目錄下的所有文件
		File[] files = fileFolder.listFiles();

		ZipEntry zipEntry;
		byte[] byteArray;
		int len;
		//遍歷目錄下的所有文件/目錄,并將它們添加到壓縮文件中
		for (File file : files) {
			//一個ZipEntry對應(yīng)壓縮文件中的一項
			zipEntry = new ZipEntry(file.getName());
			zipOutputStream.putNextEntry(zipEntry);
			try (FileInputStream in = new FileInputStream(file)) {
				byteArray = new byte[1024];
				while ((len = in.read(byteArray)) != -1) {
					zipOutputStream.write(byteArray, 0, len);
				}
			} catch (IOException ex) {
				ex.printStackTrace();
			}
			zipOutputStream.closeEntry();
		}
	} catch (IOException ex) {
		ex.printStackTrace();
	}
}

壓縮結(jié)果:

zip解壓縮

遍歷zip文件中的所有項,并獲取對應(yīng)項的輸入流,然后通過FileOutputStream輸出到指定目錄中。

@Test
public void testDecompressByZip() {
	try (
		//指定需要解壓縮的zip文件
		ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream("F:\\myFavorites.zip"))
	)
	{
		ZipEntry zipEntry;
		byte[] byteArray;
		int len;
		//遍歷zip文件中的所有項,并逐個解壓到指定的目錄中
		while ((zipEntry = zipInputStream.getNextEntry()) != null) {
			try (FileOutputStream fileOutputStream = new FileOutputStream("F:\\我的解壓目錄\\" + zipEntry.getName())) {
				byteArray = new byte[1024];
				while ((len = zipInputStream.read(byteArray)) != -1) {
					fileOutputStream.write(byteArray, 0, len);
				}
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
	} catch (IOException ex) {
		ex.printStackTrace();
	}
}

解壓縮結(jié)果:

使用FileSystem解壓縮

  • 建立一個文件系統(tǒng),包含zip文件中的所有項。
  • 遍歷zip文件中的所有項,通過文件訪問器SimpleFileVisitor將每個項復(fù)制到指定目錄中。
@Test
public void testDecompressByZip2(){
	try {
		//將壓縮文件作為一個文件系統(tǒng)訪問
		FileSystem fileSystem = FileSystems.newFileSystem(Paths.get("F:\\myFavorites.zip"), null);
		//遍歷壓縮文件中的內(nèi)容,并使用文件訪問器訪問所有內(nèi)容
		Files.walkFileTree(fileSystem.getPath("/"), new SimpleFileVisitor<Path>() {
			@Override
			public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
				System.out.println("訪問目錄中文件時調(diào)用");
				//將文件解壓到指定目錄
				Files.copy(file, new FileOutputStream("F:\\我的解壓目錄\\" + file.getName(file.getNameCount() - 1)));
				return FileVisitResult.CONTINUE;
			}

			@Override
			public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
				System.out.println("訪問目錄中文件之前調(diào)用");
				return FileVisitResult.CONTINUE;
			}

			@Override
			public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
				System.out.println("訪問目錄中文件失敗時調(diào)用");
				return FileVisitResult.SKIP_SUBTREE;
			}

			@Override
			public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
				System.out.println("訪問目錄中的文件及其所有后代之后調(diào)用");
				return FileVisitResult.CONTINUE;
			}
		});
	} catch (IOException ex) {
		ex.printStackTrace();
	}
}

到此這篇關(guān)于Java中zip的壓縮和解壓縮的實現(xiàn)代碼的文章就介紹到這了,更多相關(guān)java zip壓縮和解壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot自定義注解使用讀寫分離Mysql數(shù)據(jù)庫的實例教程

    SpringBoot自定義注解使用讀寫分離Mysql數(shù)據(jù)庫的實例教程

    這篇文章主要給大家介紹了關(guān)于SpringBoot自定義注解使用讀寫分離Mysql數(shù)據(jù)庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java日期時間使用方法匯總

    Java日期時間使用方法匯總

    這篇文章主要針對Java日期時間使用方法進行匯總,感興趣的朋友可以參考一下
    2016-03-03
  • 解決mybatisplus插入報錯argument type mismatch的問題

    解決mybatisplus插入報錯argument type mismatch的問題

    這篇文章主要介紹了解決mybatisplus插入報錯argument type mismatch的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • intellij idea創(chuàng)建第一個動態(tài)web項目的步驟方法

    intellij idea創(chuàng)建第一個動態(tài)web項目的步驟方法

    這篇文章主要介紹了intellij idea創(chuàng)建第一個動態(tài)web項目的步驟方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • java文件對話框過濾特定文件類型示例

    java文件對話框過濾特定文件類型示例

    文件作為存儲數(shù)據(jù)的單元,會根據(jù)數(shù)據(jù)類型產(chǎn)生很多分類,也就是所謂的文件類型。在對數(shù)據(jù)文件進行操作時,常常需要根據(jù)不同的文件類型來作不同的處理。本實例實現(xiàn)的是讀取文件夾指定類型的文件并顯示到表格控件中
    2014-02-02
  • java中的instanceof關(guān)鍵字詳細解讀

    java中的instanceof關(guān)鍵字詳細解讀

    這篇文章主要介紹了java中的instanceof關(guān)鍵字詳細解讀,instanceof 是 Java 的保留關(guān)鍵字,它的作用是測試它左邊的對象是否是它右邊的類的實例,返回 boolean 的數(shù)據(jù)類型,需要的朋友可以參考下
    2024-01-01
  • Spring @Cacheable注解中key的使用詳解

    Spring @Cacheable注解中key的使用詳解

    這篇文章主要介紹了Spring @Cacheable注解中key的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring?Bean生命周期詳細分析

    Spring?Bean生命周期詳細分析

    spring的核心思想之一IOC就是通過IOC容器對Bean的創(chuàng)建和各個bean之間的依賴關(guān)系進行操作,今天就來和大家分享一下bean的生命周期相關(guān)知識點
    2022-08-08
  • maven 配置多個倉庫的方法

    maven 配置多個倉庫的方法

    這篇文章主要介紹了maven 配置多個倉庫的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java線程池7個參數(shù)的詳細含義

    Java線程池7個參數(shù)的詳細含義

    java多線程開發(fā)時,常常用到線程池技術(shù),這篇文章是對創(chuàng)建java線程池時的七個參數(shù)的詳細解釋,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論