欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

zip壓縮

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

每個(gè)zip文件項(xiàng)都要對應(yīng)一個(gè)ZipEntry,然后通過ZipOutputStream的putNextEntry方法開始寫入一個(gè)新的zip文件項(xiàng),將文件數(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) {
			//一個(gè)ZipEntry對應(yīng)壓縮文件中的一項(xià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文件中的所有項(xiàng),并獲取對應(yīng)項(xiàng)的輸入流,然后通過FileOutputStream輸出到指定目錄中。

@Test
public void testDecompressByZip() {
	try (
		//指定需要解壓縮的zip文件
		ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream("F:\\myFavorites.zip"))
	)
	{
		ZipEntry zipEntry;
		byte[] byteArray;
		int len;
		//遍歷zip文件中的所有項(xiàng),并逐個(gè)解壓到指定的目錄中
		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解壓縮

  • 建立一個(gè)文件系統(tǒng),包含zip文件中的所有項(xiàng)。
  • 遍歷zip文件中的所有項(xiàng),通過文件訪問器SimpleFileVisitor將每個(gè)項(xiàng)復(fù)制到指定目錄中。
@Test
public void testDecompressByZip2(){
	try {
		//將壓縮文件作為一個(gè)文件系統(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("訪問目錄中文件時(shí)調(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("訪問目錄中文件失敗時(shí)調(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的壓縮和解壓縮的實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)java zip壓縮和解壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

    Java日期時(shí)間使用方法匯總

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

    解決mybatisplus插入報(bào)錯(cuò)argument type mismatch的問題

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

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

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

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

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

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

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

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

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

    Spring?Bean生命周期詳細(xì)分析

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

    maven 配置多個(gè)倉庫的方法

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

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

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

最新評論