canonical example by Tabnine
public void zipFile(File srcFile, File zipFile) throws IOException { try (FileInputStream fis = new FileInputStream(srcFile); ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) { zos.putNextEntry(new ZipEntry(srcFile.getName())); int len; byte[] buffer = new byte[1024]; while ((len = fis.read(buffer)) > 0) { zos.write(buffer, 0, len); } zos.closeEntry(); } }
private static List<String> getZipFileList(File file) { List<String> filesList = new ArrayList<>(); try (ZipFile zipFile = new ZipFile(file)) { Enumeration<? extends ZipEntry> entries = zipFile.entries(); while (entries.hasMoreElements()) { ZipEntry entry = entries.nextElement(); filesList.add(entry.getName()); } } catch (Exception e) { LOG.error("Error read zip file '{}'", file.getAbsolutePath(), e); } return filesList; }
public static void makeEvilZip(File outputFile) throws IOException { ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(outputFile)); ZipEntry zipEntry = new ZipEntry("../../../../../../../../../../../../../../../tmp/evil.txt"); zipOutputStream.putNextEntry(zipEntry); byte[] output = StringUtils.toUtf8("evil text"); zipOutputStream.write(output); zipOutputStream.closeEntry(); zipOutputStream.close(); } }
checkDirectory(filePath); ZipFile zipFile = new ZipFile(fileName); Enumeration enumeration = zipFile.entries(); try { while (enumeration.hasMoreElements()) { ZipEntry entry = (ZipEntry) enumeration.nextElement(); if (entry.isDirectory()) { new File(filePath, entry.getName()).mkdirs(); continue; BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry)); File file = new File(filePath + File.separator + entry.getName()); BufferedOutputStream bos = null; try { fos = new FileOutputStream(file); bos = new BufferedOutputStream(fos, TypedValue.BUFFER_SIZE); fos.write(buf, 0, len); bos.flush(); bos.close();
public static boolean isZipBomb(ZipEntry entry) { long compressedSize = entry.getCompressedSize(); long uncompressedSize = entry.getSize(); if (compressedSize < 0 || uncompressedSize < 0) { LOG.error("Zip bomb attack detected, invalid sizes: compressed {}, uncompressed {}, name {}", compressedSize, uncompressedSize, entry.getName()); return true; } if (compressedSize * MAX_SIZE_DIFF < uncompressedSize) { LOG.error("Zip bomb attack detected, invalid sizes: compressed {}, uncompressed {}, name {}", compressedSize, uncompressedSize, entry.getName()); return true; } return false; }
public ZipEntry newZipEntry(ZipEntry ze) { ZipEntry ze2 = new ZipEntry(ze.getName()); ze2.setComment(ze.getComment()); ze2.setTime(ze.getTime()); ze2.setExtra(ze.getExtra()); return ze2; }
if (zipEntryPathList != null) { for (ZipEntryPath zipEntryPath : zipEntryPathList) { zipEntryPathMap.put(zipEntryPath.zipEntry.getName(), zipEntryPath); needToAddEntryNameList.add(zipEntryPath.zipEntry.getName()); zipOutputStream = new ZipOutputStream(new FileOutputStream(outputZipFullFilename)); if (inputZipFullFilename != null) { zipFile = new ZipFile(inputZipFullFilename); Enumeration<? extends ZipEntry> enumeration = zipFile.entries(); while (enumeration.hasMoreElements()) { ZipEntry zipEntry = enumeration.nextElement(); String zipEntryName = zipEntry.getName(); InputStream inputStream = null; if (zipEntryPathMap.containsKey(zipEntryName)) { if (zipEntryPath.replace) { zipEntry = zipEntryPath.zipEntry; inputStream = new FileInputStream(zipEntryPath.fullFilename); ZipEntry newZipEntry = new ZipEntry(zipEntryName); addZipEntry(zipOutputStream, newZipEntry, inputStream); ZipEntryPath zipEntryPath = zipEntryPathMap.get(zipEntryName); ZipEntry zipEntry = zipEntryPath.zipEntry; InputStream inputStream = new FileInputStream(zipEntryPath.fullFilename); if (zipProcessor != null) { inputStream = zipProcessor.zipEntryProcess(zipEntry.getName(), inputStream);
try{ while ((entry = zip.getNextEntry()) != null) { if (!entry.isDirectory()) { log("ignoring " + entry.toString()); ZipEntry outEntry = new ZipEntry(entry.getName()); outEntry.setMethod(entry.getMethod()); outEntry.setComment(entry.getComment()); outEntry.setSize(bytes.length); if(outEntry.getMethod() == ZipEntry.STORED){ CRC32 crc = new CRC32(); crc.update(bytes); outEntry.setCrc( crc.getValue() ); outEntry.setCompressedSize(bytes.length); out.putNextEntry(outEntry); out.write(bytes); out.closeEntry(); zip.closeEntry(); out.close(); }finally{ fout.close();
int BUFFER = 1024 * 8; zip = new ZipFile(file); String newPath = extractFolder; Enumeration<? extends ZipEntry> zipFileEntries = zip.entries(); while (zipFileEntries.hasMoreElements()) { ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); String currentEntry = entry.getName(); if (!entry.isDirectory()) { BufferedInputStream is = null; BufferedOutputStream dest = null; try { is = new BufferedInputStream(zip.getInputStream(entry)); int currentByte; FileOutputStream fos = new FileOutputStream(destFile); dest = new BufferedOutputStream(fos, BUFFER); dest.write(data, 0, currentByte); dest.flush(); } finally { close(dest);
is = new FileInputStream(path + zipname); zis = new ZipInputStream(new BufferedInputStream(is)); ZipEntry ze; byte[] buffer = new byte[1024]; int count; while ((ze = zis.getNextEntry()) != null) filename = ze.getName(); if (ze.isDirectory()) { File fmd = new File(path + filename); fmd.mkdirs(); FileOutputStream fout = new FileOutputStream(path + filename); fout.write(buffer, 0, count); fout.close(); zis.closeEntry();
List<String> classNames = new ArrayList<String>(); ZipInputStream zip = new ZipInputStream(new FileInputStream("/path/to/jar/file.jar")); for (ZipEntry entry = zip.getNextEntry(); entry != null; entry = zip.getNextEntry()) { if (!entry.isDirectory() && entry.getName().endsWith(".class")) { // This ZipEntry represents a class. Now, what class does it represent? String className = entry.getName().replace('/', '.'); // including ".class" classNames.add(className.substring(0, className.length() - ".class".length())); } }
ZipOutputStream zipOutputStream = null; try { newZipFile = new ZipFile(newZipFullFilename); Enumeration<? extends ZipEntry> entries = newZipFile.entries(); FileUtil.createFile(differentOutputFullFilename); zipOutputStream = new ZipOutputStream(new FileOutputStream(differentOutputFullFilename)); while (entries.hasMoreElements()) { ZipEntry zipEntry = entries.nextElement(); if (!zipEntry.isDirectory()) { String zipEntryName = zipEntry.getName(); String oldZipEntryHash = map.get(zipEntryName); String newZipEntryHash = zipEntry.getCrc() + Constant.Symbol.DOT + zipEntry.getSize(); addZipEntry(zipOutputStream, zipEntry, newZipFile.getInputStream(zipEntry));
private void addFileToZip(ZipOutputStream zos, String filename) throws IOException { FileInputStream fis = new FileInputStream(new File(exportDirName + filename)); ZipEntry ze = new ZipEntry(filename); zos.putNextEntry(ze); int length; byte bytes[] = new byte[1024]; while ((length = fis.read(bytes)) >= 0) zos.write(bytes, 0, length); zos.closeEntry(); fis.close(); }
static public void recieveZipFile(ZipInputStream zis, String relativePath) throws Exception { ZipEntry zipEntry = null; int readSize; byte[] buffer = new byte[FILE_BUFFER_SIZE]; while(null != (zipEntry = zis.getNextEntry())){ File outFile = new File(relativePath + "/" + zipEntry.getName()); File parentFolder = outFile.getParentFile(); if(parentFolder.exists() == false){ parentFolder.mkdirs(); } BufferedOutputStream fos = null; try{ fos = new BufferedOutputStream(new FileOutputStream(outFile)); while((readSize = zis.read(buffer)) > 0){ fos.write(buffer, 0, readSize); } fos.flush(); }finally{ if(fos != null){ try { fos.close(); }catch(Exception ex){} } } } }
try (ZipInputStream input = new ZipInputStream(new FileInputStream(sourceFile))) { while ((entry = input.getNextEntry()) != null) { if (entry.isDirectory()) { continue; final File file = new File(outputDir, entry.getName()); final File parent = file.getParentFile(); if (!parent.exists() && !parent.mkdirs()) { try (FileOutputStream output = new FileOutputStream(file)) { IOUtils.copy(input, output); } catch (final Exception e) { throw new RuntimeException("Error expanding entry '" + entry.getName() + "'", e); input.closeEntry(); } catch (final IOException e) { throw new KsqlException(
private void extractTo(ZipEntry entry, InputStream entryInputStream, File toDir) throws IOException { bombIfZipEntryPathContainsDirectoryTraversalCharacters(entry.getName()); String entryName = nonRootedEntryName(entry); try (FileOutputStream os = new FileOutputStream(outputFile)) { IOUtils.copyLarge(entryInputStream, os); if (zipEntryHandler != null) { FileInputStream stream = null; try { stream = new FileInputStream(outputFile); zipEntryHandler.handleEntry(entry, stream); } finally { if (stream != null) { try { stream.close(); } catch (IOException e) { LOGGER.warn("Failed to close the file-handle to file '{}' which was created as artifact download.", outputFile.getAbsolutePath(), e);
@Test public void testDecompressZip() throws IOException { final File tmpDir = temporaryFolder.newFolder("testDecompressZip"); final File zipFile = new File(tmpDir, testFile.getName() + ".zip"); Assert.assertFalse(zipFile.exists()); try (final ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile))) { out.putNextEntry(new ZipEntry("cool.file")); ByteStreams.copy(new FileInputStream(testFile), out); out.closeEntry(); } try (final InputStream inputStream = CompressionUtils.decompress(new FileInputStream(zipFile), zipFile.getName())) { assertGoodDataStream(inputStream); } }
private void readArchive(ZipFile zipFile) throws IOException { Enumeration<? extends ZipEntry> zipEnums = zipFile.entries(); while (zipEnums.hasMoreElements()) { ZipEntry entry = zipEnums.nextElement(); if (!entry.isDirectory()) { if (defaultsConf == null && entry.getName().equals("defaults.yaml")) { try (InputStreamReader isr = new InputStreamReader(zipFile.getInputStream(entry))) { defaultsConf = (Map<String, Object>) yaml.load(isr); } } if (stormConf == null && entry.getName().equals("storm.yaml")) { try (InputStreamReader isr = new InputStreamReader(zipFile.getInputStream(entry))) { stormConf = (Map<String, Object>) yaml.load(isr); } } } } } }
InputStream patchFileStream = null; try { oldDexStream = new BufferedInputStream(baseApk.getInputStream(oldDexEntry)); patchFileStream = (patchFileEntry != null ? new BufferedInputStream(patchPkg.getInputStream(patchFileEntry)) : null); ZipOutputStream zos = null; try { zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(patchedDexFile))); zos.putNextEntry(new ZipEntry(ShareConstants.DEX_IN_JAR)); zis = new ZipInputStream(oldDexStream); ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { if (ShareConstants.DEX_IN_JAR.equals(entry.getName())) break; new DexPatchApplier(oldDexStream, patchFileStream).executeAndSaveTo(zos); zos.closeEntry(); } finally { StreamUtil.closeQuietly(zos);