乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Java中zip的壓縮和解壓縮

       丹楓無(wú)跡 2021-04-28

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

      zip壓縮

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

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

      @Test
      public void testCompressByZip() {
      try (
      //指定壓縮完成后zip文件的存儲(chǔ)路徑
      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對(duì)應(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),并獲取對(duì)應(yīng)項(xiàng)的輸入流,然后通過(guò)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解壓縮

      1. 建立一個(gè)文件系統(tǒng),包含zip文件中的所有項(xiàng)。
      2. 遍歷zip文件中的所有項(xiàng),通過(guò)文件訪問(wèn)器SimpleFileVisitor將每個(gè)項(xiàng)復(fù)制到指定目錄中。
      @Test
      public void testDecompressByZip2(){
      try {
      //將壓縮文件作為一個(gè)文件系統(tǒng)訪問(wèn)
      FileSystem fileSystem = FileSystems.newFileSystem(Paths.get("F:\\myFavorites.zip"), null);
      //遍歷壓縮文件中的內(nèi)容,并使用文件訪問(wèn)器訪問(wèn)所有內(nèi)容
      Files.walkFileTree(fileSystem.getPath("/"), new SimpleFileVisitor<Path>() {
      @Override
      public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
      System.out.println("訪問(wèn)目錄中文件時(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("訪問(wèn)目錄中文件之前調(diào)用");
      return FileVisitResult.CONTINUE;
      }
      
      @Override
      public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
      System.out.println("訪問(wèn)目錄中文件失敗時(shí)調(diào)用");
      return FileVisitResult.SKIP_SUBTREE;
      }
      
      @Override
      public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
      System.out.println("訪問(wèn)目錄中的文件及其所有后代之后調(diào)用");
      return FileVisitResult.CONTINUE;
      }
      });
      } catch (IOException ex) {
      ex.printStackTrace();
      }
      }
      

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多