<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java實現(xiàn)不解壓讀取zip

          共 4411字,需瀏覽 9分鐘

           ·

          2021-03-24 12:30

          來源: https://blog.csdn.net/Peacock__/article/details/92840156
          作者: 小李小李彬彬有禮

          最近在做的功能模塊有遇到下載ZIP文件里的文件內(nèi)容,一開始的想法是先通過代碼執(zhí)行解壓,然后讀取文件內(nèi)容,但是感覺好麻煩,于是度了一下,發(fā)現(xiàn)可以無需解壓直接讀取,而且還是JDK提供給我們的工具。(((o(?▽?)o)))

          ZipInputStream

          解決方案就是通過ZipInputStream來讀取。

          ZipInputStream在JDK中的util包中,而我們平時用的FileInputStream等都是在io包中的。

          使用方法如代碼所示:

          public static void main(String[] args) throws IOException {
           
             //獲取文件輸入流
             FileInputStream input = new FileInputStream("C:\\Users\\Administrator\\Desktop\\test\\test.zip");
           
             //獲取ZIP輸入流(一定要指定字符集Charset.forName("GBK")否則會報java.lang.IllegalArgumentException: MALFORMED)
             ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(input), Charset.forName("GBK"));
           
             //定義ZipEntry置為null,避免由于重復(fù)調(diào)用zipInputStream.getNextEntry造成的不必要的問題
             ZipEntry ze = null;
           
             //循環(huán)遍歷
             while ((ze = zipInputStream.getNextEntry()) != null) {
           
                 System.out.println("文件名:" + ze.getName() + " 文件大小:" + ze.getSize() + " bytes");
                 System.out.println("文件內(nèi)容:");
           
                 //讀取
                 BufferedReader br = new BufferedReader(new InputStreamReader(zipInputStream,Charset.forName("GBK")));
           
                 String line;
           
                 //內(nèi)容不為空,輸出
                 while ((line = br.readLine()) != null) {
                     System.out.println(line);
                 }
             }
           
             //一定記得關(guān)閉流
             zipInputStream.closeEntry();
             input.close();
          }
           
           
          控制臺輸出:
           
          文件名:文件1.txt 文件大小:25 bytes
          文件內(nèi)容:
          213123
          edqfdqf
          er2523
          文件名:文件2.txt 文件大小:14 bytes
          文件內(nèi)容:
          rfq
          e
          fqefer

          真實使用場景

          我真實使用場景是在讀取華為云對象存儲服務(wù)中Bucket中指定.ZIP文件中包含的全部文件內(nèi)容,代碼如下:

          華為云官方文檔中給的示例并不能滿足我們下載.ZIP文件,所以有需要的朋友可以參考。

          public static void main(String[] args) throws IOException {
          //華為云對象存儲認(rèn)證對象
              final ObsClient obsClient = new ObsClient(ak, sk, endPoint);
              //讀取對象存儲中指定Bucket中的指定文件(test123為Bucket名稱、File.zip為文件名稱)
              ObsObject obsObject = obsClient.getObject("test23""File.zip");
              InputStream input = obsObject.getObjectContent();

              System.out.println("Object content:");
              ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(input));

              //定義ZipEntry,避免由于重復(fù)調(diào)用zipInputStream.getNextEntry造成的不必要的問題
              ZipEntry ze = null;
              while ((ze = zipInputStream.getNextEntry()) != null) {
                      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(zipInputStream));
                      String line;
                      while ((line = bufferedReader.readLine()) != null) {
                          System.out.println(line);
                      }
              }
              //一定記得關(guān)閉流
              zipInputStream.closeEntry();
              input.close();
          }

          讀取數(shù)據(jù)成功

          -- END --

          我更新了《10萬字Springboot經(jīng)典學(xué)習(xí)筆記》,點(diǎn)擊下面小卡片,進(jìn)入【Java開發(fā)寶典】,回復(fù):筆記,即可免費(fèi)獲取。

                                                                 點(diǎn)贊是最大的支持 

          瀏覽 68
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  韩国精品在线播放 | 亚洲 欧美 激情 另类 校园 | 亚洲欧美A片 | 国产精品久久久久久久久久久久久久久久 | 国产女人18毛片水18精品软件 |