/******************************************************************************* * Copyright (c) 2012 OpenLegacy Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * OpenLegacy Inc. - initial API and implementation *******************************************************************************/ package org.openlegacy.utils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.SystemUtils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.text.MessageFormat; import java.util.Arrays; import java.util.Map; import java.util.Set; public class FileUtils { /** * @param content * @return a file name which doesn't exists. null if file content was matched by one of the scanned files * @throws IOException */ public static File findNextAndDifferentFreeFile(File baseDir, String fileNameNoSuffix, String fileExtension, byte[] content) throws IOException { File file = null; String fileSuffix = ""; int filesCount = 1; do { String fileName = MessageFormat.format("{0}{1}.{2}", fileNameNoSuffix, fileSuffix, fileExtension); file = new File(baseDir, fileName); if (file.exists()) { byte[] fileContent = org.apache.commons.io.FileUtils.readFileToByteArray(file); if (Arrays.equals(fileContent, content)) { return null; } fileSuffix = "_" + filesCount++; } } while (file.exists()); file.getParentFile().mkdirs(); return file; } public static void copyAndReplace(InputStream inputStream, OutputStream outputStream, Map<String, String> keysValues) throws IOException { String content = IOUtils.toString(inputStream); if (keysValues != null) { Set<String> keys = keysValues.keySet(); for (String key : keys) { content = content.replaceAll(key, keysValues.get(key)); } } outputStream.write(content.getBytes()); } public static String fileWithoutExtension(String filename) { filename = new File(filename).getName(); return filename.substring(0, filename.lastIndexOf(".")); } public static String fileWithoutAnyExtension(String filename) { filename = new File(filename).getName(); return filename.substring(0, filename.indexOf(".")); } public static File extractToTempDir(URL resource, String fileName) throws IOException { File tempDir = SystemUtils.getJavaIoTmpDir(); File file = new File(tempDir, fileName); FileOutputStream output = null; try { output = new FileOutputStream(file); IOUtils.copy(resource.openStream(), output); } finally { IOUtils.closeQuietly(output); } return file; } /** * Deletes the file if it's empty * * @param file */ public static void deleteEmptyFile(File file) { if (file == null) { return; } try { FileInputStream fis = new FileInputStream(file); byte[] bytes = IOUtils.toByteArray(fis); if (bytes.length == 0) { org.apache.commons.io.FileUtils.deleteQuietly(file); } } catch (IOException e) { // do nothing } } }