/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.utils.common.legacy; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; /** * File support methods. * * @author Doreen Seider * @deprecated user apache.commons.io or other common libraries */ @Deprecated public abstract class FileSupport { private static final int EOF_INDICATOR = -1; private static final int BUFFER_SIZE = 8192; /** * Private constructor of this utility class. */ private FileSupport() {} /** * Deletes a directory recursively. * * @param file the directory that should be deleted. * @return True on success. */ public static boolean deleteFile(File file) { if (file.isDirectory()) { for (File f : file.listFiles()) { boolean success = deleteFile(f); if (!success) { return false; } } } return file.delete(); } /** * Zip's a file or directory. * * @param file the plain file or directory * @return a zip'ed stream * @throws IOException in case of an IOException * @throws InterruptedException upon interruption */ public static byte[] zip(final File file) throws IOException, InterruptedException { final ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); final ZipOutputStream zipOut = new ZipOutputStream(byteOut); zip(file, file, zipOut); zipOut.close(); final byte[] result = byteOut.toByteArray(); return result; } /** * Zip's a file or directory. * * @param file the input plain file or directory * @param zip the output file * @throws IOException in case of an IOException * @throws InterruptedException upon interruption */ public static void zipToFile(final File file, final File zip) throws IOException, InterruptedException { if (!zip.exists()) { zip.createNewFile(); } final FileOutputStream fileOut = new FileOutputStream(zip); final ZipOutputStream zipOut = new ZipOutputStream(fileOut); zip(file, file, zipOut); zipOut.close(); } /** * Zip's a file or directory. * * @param file the plain file or directory * @param base the base file or directory * @param out the {@link ZipOutputStream} to write to * @throws IOException in case of an IOException * @throws InterruptedException upon interruption */ public static void zip(final File file, final File base, final ZipOutputStream out) throws IOException, InterruptedException { if (!file.exists() || !file.canRead()) { throw new RuntimeException("File does not exist or can not be read."); } if (Thread.interrupted()) { Thread.currentThread().interrupt(); throw new InterruptedException(); } if (file.isDirectory()) { final File[] subFiles = file.listFiles(); for (final File subFile : subFiles) { zip(subFile, base, out); } } else { final FileInputStream in = new FileInputStream(file); final ZipEntry entry = new ZipEntry(file.getPath().substring( base.getPath().length() + 1)); out.putNextEntry(entry); final byte[] buffer = new byte[BUFFER_SIZE]; int read; while ((read = in.read(buffer)) != EOF_INDICATOR) { out.write(buffer, 0, read); } in.close(); } } /** * Unzip's content to a directory. * * @param zip the zip'ed content * @param target the target directory * @throws IOException in case of an IOException */ public static void unzip(final byte[] zip, final File target) throws IOException { final ByteArrayInputStream inputStream = new ByteArrayInputStream(zip); unzip(inputStream, target); } /** * Unzip's content from an {@link InputStream} to a directory. * * @param inputStream the {@link InputStream} providing the zip'ed content * @param target the target directory * @throws IOException in case of an IOException */ public static void unzip(final InputStream inputStream, final File target) throws IOException { final ZipInputStream input = new ZipInputStream(inputStream); ZipEntry entry; while ((entry = input.getNextEntry()) != null) { int count; byte[] data = new byte[BUFFER_SIZE]; // write the files to the disk final File file = new File(target, entry.getName()); if (entry.isDirectory()) { file.mkdirs(); } else { final File parent = file.getParentFile(); parent.mkdirs(); FileOutputStream out = new FileOutputStream(file); while ((count = input.read(data, 0, BUFFER_SIZE)) != EOF_INDICATOR) { out.write(data, 0, count); } out.close(); } } input.close(); } }