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

Java無需解壓直接讀取ZIP壓縮包里的文件及內容

 更新時間:2024年03月15日 10:49:08   作者:碼農娟  
最近開發(fā)的時候遇到要獲取到zip壓縮包里面的文件內容,解決方案就是通過ZipInputStream來讀取,下面通過實例代碼介紹Java無需解壓直接讀取ZIP壓縮包里的文件及內容,感興趣的朋友跟隨小編一起看看吧

Java無需解壓直接讀取ZIP壓縮包里的文件及內容

jar vs zip:

jar 文件和 zip 文件都是歸檔文件,并且都經過壓縮。事實上,jar 文件使用與 zip 文件相同的存檔和壓縮技術,所以 jar 文件實際上是一種特定類型的 zip 文件。(JAR 文件本質上是一個包含可選 META-INF 目錄的 zip 文件。)這一切都意味著:

您可以使用與打開 zip 文件相同的工具打開 jar 文件
jar 文件是 zip 文件的子集,因此如果 zip 文件遵循 jar 規(guī)范,則它可以用作 jar 文件。

最近開發(fā)的時候遇到要獲取到zip壓縮包里面的文件內容,一開始的想法是先通過代碼執(zhí)行解壓,然后讀取文件內容,但是感覺好麻煩,于是度了一下,發(fā)現(xiàn)可以無需解壓直接讀取,而且還是JDK提供給我們的工具。

解決方案就是通過ZipInputStream來讀取。
ZipInputStream在JDK中的util包中,而我們平時用的FileInputStream等都是在io包中的。

示例如下:

@Test
    public void test() throws Exception {
        //獲取文件輸入流
        FileInputStream input = new FileInputStream("D:\\2022-03-28.zip");
        //獲取ZIP輸入流(一定要指定字符集Charset.forName("GBK")否則會報java.lang.IllegalArgumentException: MALFORMED)
        ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(input), Charset.forName("GBK"));
        //定義ZipEntry置為null,避免由于重復調用zipInputStream.getNextEntry造成的不必要的問題
        ZipEntry ze;
        List<List<Object>> list;
        //循環(huán)遍歷
        while ((ze = zipInputStream.getNextEntry()) != null) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            if (!ze.isDirectory() && ze.toString().endsWith("xls")) {
                //讀取
                byte[] buffer = new byte[1024];
                int len;
                while ((len = zipInputStream.read(buffer)) > -1) {
                    baos.write(buffer, 0, len);
                }
                baos.flush();
                InputStream stream = new ByteArrayInputStream(baos.toByteArray()); //excel 流
                //根據(jù)excel輸入流讀取EXCEL中的數(shù)據(jù)
                ExcelReader excelReader = ExcelUtil.getReader(stream);
                list =  excelReader.read(2, excelReader.getRowCount());
                for(List<Object> objList : list){
                 objList.get(0);
                 objList.get(1); 
                 //獲取到數(shù)據(jù)進行相關處理
                 ......
                }
            }
        }
        //一定記得關閉流
        zipInputStream.closeEntry();
        input.close();
    }

補充:

java 直接讀取zip文件和文件內容

不解壓zip文件,直接讀取zip包內的文件夾以及文件內容
zip包內內容:

這里寫圖片描述

代碼如下:

import java.io.*;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
public class ReadFile {
    public static void main(String[] args) throws IOException {
        String path = "F:\\*******\\201707\\78641695079026649.zip";
        ZipFile zf = new ZipFile(path);
        InputStream in = new BufferedInputStream(new FileInputStream(path));
        Charset gbk = Charset.forName("gbk");
        ZipInputStream zin = new ZipInputStream(in,gbk);
        ZipEntry ze;
        while((ze = zin.getNextEntry()) != null){
            if(ze.toString().endsWith("txt")){
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(zf.getInputStream(ze)));
                String line;
                while((line = br.readLine()) != null){
                    System.out.println(line.toString());
                }
                br.close();
            }
            System.out.println();
        }
        zin.closeEntry();
    }
}

到此這篇關于Java無需解壓直接讀取ZIP壓縮包里的文件及內容的文章就介紹到這了,更多相關java讀取zip壓縮包內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java中jdk代理和cglib代理使用步驟詳解

    java中jdk代理和cglib代理使用步驟詳解

    這篇文章主要給大家介紹了關于java中jdk代理和cglib代理使用步驟的相關資料,JDK代理和CGLIB是Java中兩種常見的代理實現(xiàn)方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • IDEA 單元測試創(chuàng)建方法詳解(2020.03版本親測)

    IDEA 單元測試創(chuàng)建方法詳解(2020.03版本親測)

    這篇文章主要介紹了IDEA 單元測試創(chuàng)建方法詳解(2020.03版本親測),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Spring?Boot中application配置文件的生效順序及應用范圍

    Spring?Boot中application配置文件的生效順序及應用范圍

    Spring?Boot的一個重要特性就是它的自動配置,這一特性在很大程度上依賴于名稱為application的配置文件,本文將詳細介紹在Spring?Boot中,這些配置文件的加載順序以及每份文件的應用范圍,需要的朋友可以參考下
    2024-03-03
  • Java 圖解Spring啟動時的后置處理器工作流程是怎樣的

    Java 圖解Spring啟動時的后置處理器工作流程是怎樣的

    spring的后置處理器有兩類,bean后置處理器,bf(BeanFactory)后置處理器。bean后置處理器作用于bean的生命周期,bf的后置處理器作用于bean工廠的生命周期
    2021-10-10
  • Java基礎之FastJson詳解

    Java基礎之FastJson詳解

    今天給大家復習Java基礎FastJson,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Java生成隨機姓名、性別和年齡的實現(xiàn)示例

    Java生成隨機姓名、性別和年齡的實現(xiàn)示例

    這篇文章主要介紹了Java生成隨機姓名、性別和年齡的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Java實現(xiàn)獲取某年某月第一天/最后一天的方法

    Java實現(xiàn)獲取某年某月第一天/最后一天的方法

    這篇文章主要介紹了Java實現(xiàn)獲取某年某月第一天/最后一天的方法,涉及java日期運算相關操作技巧,需要的朋友可以參考下
    2018-02-02
  • C語言指針數(shù)組案例詳解

    C語言指針數(shù)組案例詳解

    這篇文章主要介紹了C語言指針數(shù)組案例詳解,本文通過案例詳細的解釋了指針與數(shù)組的初始化還有關系與應用,需要的朋友可以參考下這篇文章
    2021-07-07
  • SpringBoot+WebSocket實現(xiàn)即時通訊功能(J2EE方式)

    SpringBoot+WebSocket實現(xiàn)即時通訊功能(J2EE方式)

    WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議,WebSocket使得客戶端和服務器之間的數(shù)據(jù)交換變得更加簡單,允許服務端主動向客戶端推送數(shù)據(jù),本文給大家介紹了SpringBoot+WebSocket實現(xiàn)即時通訊功能(J2EE方式),需要的朋友可以參考下
    2025-01-01
  • JavaEE idea的smart tomcat插件使用

    JavaEE idea的smart tomcat插件使用

    這篇文章主要介紹了JavaEE idea的smart tomcat插件使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09

最新評論