List of usage examples for org.apache.commons.compress.archivers.zip ZipArchiveInputStream getNextZipEntry
public ZipArchiveEntry getNextZipEntry() throws IOException
From source file:uk.nhs.cfh.dsp.srth.distribution.FileDownloader.java
public void getFileFromTRUDArchive(String trudArchiveName, String fileName, String outputURL) { logger.info("Now getting file... "); if (ftpClient.isConnected()) { logger.info("ftp client is connected... "); // now get file specified by inputURL try {/*from w w w .j av a2s. c o m*/ ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE); logger.info("Sending NOOP command... "); // send NOOP command to see if connection is still active if (ftpClient.sendNoOp()) { logger.info("ftpClient.getReplyString() = " + ftpClient.getReplyString()); FTPFile[] files = ftpClient.listFiles(getPackPath()); for (FTPFile file : files) { logger.info("file.getName() = " + file.getName()); logger.info("file.getSize() = " + file.getSize()); if (file.getName().equals(trudArchiveName) && file.getSize() > 0) { InputStream is = ftpClient.retrieveFileStream(getPackPath() + trudArchiveName); if (is != null) { ZipArchiveInputStream zipArchiveInputStream = new ZipArchiveInputStream(is); ZipArchiveEntry zipArchiveEntry = zipArchiveInputStream.getNextZipEntry(); while (zipArchiveEntry != null) { String zippedArchiveEntryName = zipArchiveEntry.getName(); logger.info("zippedArchiveEntryName = " + zippedArchiveEntryName); logger.info("fileName = " + fileName); if (zippedArchiveEntryName.equals(fileName)) { logger.info("Extracting: " + zippedArchiveEntryName); File outputLocation = new File(outputURL); boolean canWrite = outputLocation.exists(); logger.info("canWrite = " + canWrite); if (!canWrite) { canWrite = outputLocation.mkdirs(); logger.info("canWrite after mkdirs = " + canWrite); } if (canWrite && outputLocation.canWrite()) { logger.info("outputLocation.getPath() = " + outputLocation.getPath()); File destinationFile = new File(outputLocation.getAbsolutePath(), zippedArchiveEntryName); OutputStream out = new FileOutputStream(destinationFile); IOUtils.copy(zipArchiveInputStream, out); out.close(); if (zippedArchiveEntryName.indexOf(".zip") > -1) { // unpackZip file extractZipFileContents(destinationFile); } } } else { logger.info("Resetting zipArchiveEntry"); zipArchiveEntry = zipArchiveInputStream.getNextZipEntry(); if (zipArchiveEntry != null) { logger.info("zipArchiveEntry.getName() = " + zipArchiveEntry.getName()); } } } zipArchiveInputStream.close(); is.close(); } break; } } // complete pending commands; needed after opening and closing streams ftpClient.completePendingCommand(); } else { logger.warning("FTP connection might have timed out."); ftpClient.disconnect(); } } catch (IOException e) { logger.warning("FTP connection might have timed out. " + ERR_MESSAGE + e.fillInStackTrace()); } } else { logger.warning("No connection to TRUD is available. Ensure FTP connection is open"); } }