예제 #1
0
  public static int ZipCopyFile2Zip(
      ZipFile fromZipFile, String fromFile, ZipFile toZipFile, String toFile) {
    int retint = 0;
    ZipInputStream is = null;

    try {

      // Get the FileHeader of the File you want to extract from the
      // zip file. Input for the below method is the name of the file
      // For example: 123.txt or abc/123.txt if the file 123.txt
      // is inside the directory abc
      FileHeader fileHeader = fromZipFile.getFileHeader(fromFile);

      if (fileHeader != null) {

        // Get the InputStream from the ZipFile
        is = fromZipFile.getInputStream(fileHeader);

        AddStreamToZip(toZipFile, is, toFile);

        retint++;

      } else {
        System.err.println("   !!未找到:" + fromFile + "@" + fromZipFile.getFile().getName());
        retint = -1;
      }
    } catch (Exception e) {
      e.printStackTrace();
      retint = -1;
    } finally {
      if (is != null) {
        try {
          is.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
    return retint;
  }
예제 #2
0
  public void ExtractSelectFilesWithInputStream(
      String zipFileName, String fileName, String destinationPath) {

    ZipInputStream is = null;
    OutputStream os = null;

    try {
      // Initiate the ZipFile
      ZipFile zipFile = new ZipFile(zipFileName);
      // String destinationPath = "c:\\ZipTest";

      // If zip file is password protected then set the password
      if (zipFile.isEncrypted()) {
        zipFile.setPassword("password");
      }

      // Get the FileHeader of the File you want to extract from the
      // zip file. Input for the below method is the name of the file
      // For example: 123.txt or abc/123.txt if the file 123.txt
      // is inside the directory abc
      FileHeader fileHeader = zipFile.getFileHeader(fileName);

      if (fileHeader != null) {

        // Build the output file
        String outFilePath =
            destinationPath + System.getProperty("file.separator") + fileHeader.getFileName();
        File outFile = new File(outFilePath);

        // Checks if the file is a directory
        if (fileHeader.isDirectory()) {
          // This functionality is up to your requirements
          // For now I create the directory
          outFile.mkdirs();
          return;
        }

        // Check if the directories(including parent directories)
        // in the output file path exists
        File parentDir = outFile.getParentFile();
        if (!parentDir.exists()) {
          parentDir.mkdirs(); // If not create those directories
        }

        // Get the InputStream from the ZipFile
        is = zipFile.getInputStream(fileHeader);
        // Initialize the output stream
        os = new FileOutputStream(outFile);

        int readLen = -1;
        byte[] buff = new byte[BUFF_SIZE];

        // Loop until End of File and write the contents to the output
        // stream
        while ((readLen = is.read(buff)) != -1) {
          os.write(buff, 0, readLen);
        }

        // Closing inputstream also checks for CRC of the the just
        // extracted file.
        // If CRC check has to be skipped (for ex: to cancel the unzip
        // operation, etc)
        // use method is.close(boolean skipCRCCheck) and set the flag,
        // skipCRCCheck to false
        // NOTE: It is recommended to close outputStream first because
        // Zip4j throws
        // an exception if CRC check fails
        is.close();

        // Close output stream
        os.close();

        // To restore File attributes (ex: last modified file time,
        // read only flag, etc) of the extracted file, a utility class
        // can be used as shown below
        UnzipUtil.applyFileAttributes(fileHeader, outFile);

        System.out.println("Done extracting: " + fileHeader.getFileName());
      } else {
        System.err.println("FileHeader does not exist-->" + fileName);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }