java从tar.gz中抽取某个文件


File tarGzFile = new File(archiveFileName + ".tar.gz");
    FileInputStream tarGzFileIs = null;
    CompressorInputStream cis = null;
    TarArchiveInputStream tis = null;
    BufferedReader br = null;
    try {
      tarGzFileIs = new FileInputStream(tarGzFile);
      cis = new GzipCompressorInputStream(tarGzFileIs, true);
      tis = new TarArchiveInputStream(cis);
      TarArchiveEntry entry = tis.getNextTarEntry();
      StringBuffer ret = null;

      while (entry != null) {
        if (entry.getName().contains(_snapshotID)) {
          br = new BufferedReader(new InputStreamReader(tis, "UTF8"));
          
          // Read the snapshot file line by line
          String line = br.readLine();
          while (line != null) {
              // add the line to the snapshot
              if(ret == null) {
                  ret = new StringBuffer(line);
              } else {
                  ret.append("\n").append(line);
              }
              // Read next line.
              line = br.readLine();
          } // end of loop reading the lines
          
          if (ret != null) {
            snapshot = ret.toString();
          }
          break;
        }
        entry = tis.getNextTarEntry();
      }
    } catch (FileNotFoundException e) {
      throw new PnSnapshotRepositoryConnectorException(
          PnSnapshotRepositoryConnectorException.SN_NOT_IN_REPOSITORY);
    } catch (IOException e) {
      throw new PnSnapshotRepositoryConnectorException(
          PnSnapshotRepositoryConnectorException.SN_NOT_IN_REPOSITORY);
    } finally {
      if (br != null) {
        try {
          br.close();
        } catch (IOException e) {
        }
      }
      if (tis != null) {
        try {
          tis.close();
        } catch (IOException e) {
        }
      }
      if (cis != null) {
        try {
          cis.close();
        } catch (IOException e) {
        }
      }
      if (tarGzFileIs != null) {
        try {
          tarGzFileIs.close();
        } catch (IOException e) {
        }
      }
    }



上述是从文件抽取文件返回字符串,如果抽取返回文件,这可做如下修改:

while (entry != null) {
        if (entry.getName().contains(_snapshotID)) {
          snapshotFile = new File(newSnapshotFilePath);
          os = new FileOutputStream(snapshotFile);
          IOUtils.copy(tis, os);
          break;
        }
        entry = tis.getNextTarEntry();
      }

你可能感兴趣的:(java)