/* *Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * *WSO2 Inc. licenses this file to you under the Apache License, *Version 2.0 (the "License"); you may not use this file except *in compliance with the License. *You may obtain a copy of the License at * *http://www.apache.org/licenses/LICENSE-2.0 * *Unless required by applicable law or agreed to in writing, *software distributed under the License is distributed on an *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *KIND, either express or implied. See the License for the *specific language governing permissions and limitations *under the License. */ package org.wso2.esb.integration.common.utils.common; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.io.*; import java.net.URISyntaxException; import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.JarOutputStream; public class FileManager { private static final Log log = LogFactory.getLog(FileManager.class); public static String readFile(String filePath) throws IOException { BufferedReader reader; StringBuilder stringBuilder; String line; String ls; log.debug("Path to file : " + filePath); reader = new BufferedReader(new FileReader(filePath)); stringBuilder = new StringBuilder(); ls = System.getProperty("line.separator"); while ((line = reader.readLine()) != null) { stringBuilder.append(line); stringBuilder.append(ls); } reader.close(); return stringBuilder.toString(); } public static String readFile(File file) throws IOException { BufferedReader reader; StringBuilder stringBuilder; String line; String ls; reader = new BufferedReader(new FileReader(file)); stringBuilder = new StringBuilder(); ls = System.getProperty("line.separator"); while ((line = reader.readLine()) != null) { stringBuilder.append(line); stringBuilder.append(ls); } reader.close(); return stringBuilder.toString(); } public static void writeToFile(String filePath, String content) throws IOException { BufferedWriter writer = new BufferedWriter(new FileWriter(filePath, true)); try { writer.write(content); writer.newLine(); writer.flush(); } finally { try { writer.close(); } catch (IOException e) { //ignore } } } public static void copyFile(File sourceFile, String destinationPath) throws IOException { File destinationFile = new File(destinationPath); FileReader in = new FileReader(sourceFile); FileWriter out = new FileWriter(destinationFile); int c; try { while ((c = in.read()) != -1) { out.write(c); } } finally { try { in.close(); } catch (IOException e) { //ignore } try { out.close(); } catch (IOException e) { //ignore } } } public static File copyResourceToFileSystem(String sourcePath, String targetPath, String fileName) throws IOException { File file = new File(targetPath + File.separator + fileName); if (file.exists()) { FileUtils.deleteQuietly(file); } FileUtils.touch(file); OutputStream os = FileUtils.openOutputStream(file); InputStream is = new FileInputStream(sourcePath); if (is != null) { byte[] data = new byte[1024]; int len; while ((len = is.read(data)) != -1) { os.write(data, 0, len); } os.flush(); os.close(); is.close(); } return file; } public void copyJarFile(String sourceFileLocationWithFileName, String destinationDirectory) throws IOException, URISyntaxException { File sourceFile = new File(getClass().getResource(sourceFileLocationWithFileName).toURI()); File destinationFileDirectory = new File(destinationDirectory); JarFile jarFile = new JarFile(sourceFile); String fileName = jarFile.getName(); String fileNameLastPart = fileName.substring(fileName.lastIndexOf(File.separator)); File destinationFile = new File(destinationFileDirectory, fileNameLastPart); JarOutputStream jarOutputStream = new JarOutputStream(new FileOutputStream(destinationFile)); Enumeration<JarEntry> entries = jarFile.entries(); while (entries.hasMoreElements()) { JarEntry jarEntry = entries.nextElement(); InputStream inputStream = jarFile.getInputStream(jarEntry); //jarOutputStream.putNextEntry(jarEntry); //create a new jarEntry to avoid ZipException: invalid jarEntry compressed size jarOutputStream.putNextEntry(new JarEntry(jarEntry.getName())); byte[] buffer = new byte[4096]; int bytesRead = 0; while ((bytesRead = inputStream.read(buffer)) != -1) { jarOutputStream.write(buffer, 0, bytesRead); } inputStream.close(); jarOutputStream.flush(); jarOutputStream.closeEntry(); } jarOutputStream.close(); } public static void copyJarFile(File sourceFile, String destinationDirectory) throws IOException { File destinationFileDirectory = new File(destinationDirectory); JarFile jarFile = new JarFile(sourceFile); String fileName = jarFile.getName(); String fileNameLastPart = fileName.substring(fileName.lastIndexOf(File.separator)); File destinationFile = new File(destinationFileDirectory, fileNameLastPart); JarOutputStream jarOutputStream = null; try { jarOutputStream = new JarOutputStream(new FileOutputStream(destinationFile)); Enumeration<JarEntry> entries = jarFile.entries(); while (entries.hasMoreElements()) { JarEntry jarEntry = entries.nextElement(); InputStream inputStream = jarFile.getInputStream(jarEntry); //jarOutputStream.putNextEntry(jarEntry); //create a new jarEntry to avoid ZipException: invalid jarEntry compressed size jarOutputStream.putNextEntry(new JarEntry(jarEntry.getName())); byte[] buffer = new byte[4096]; int bytesRead = 0; while ((bytesRead = inputStream.read(buffer)) != -1) { jarOutputStream.write(buffer, 0, bytesRead); } inputStream.close(); jarOutputStream.flush(); jarOutputStream.closeEntry(); } } finally { if (jarOutputStream != null) { try { jarOutputStream.close(); } catch (IOException e) { } } } } public static boolean deleteFile(String filePathWithFileName) { File jarFile = new File(filePathWithFileName); return !jarFile.isDirectory() && jarFile.delete(); } public static byte[] getBytesFromFile(String fileName) throws IOException { File file = new File(fileName); InputStream is = new FileInputStream(file); long length = file.length(); byte[] bytes = new byte[(int) length]; int offset = 0; int numRead = 0; while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) { offset += numRead; } // Ensure all the bytes have been read in if (offset < bytes.length) { throw new IOException("Could not completely read file " + file.getName()); } is.close(); return bytes; } }