package org.stagemonitor.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.stagemonitor.configuration.source.PropertyFileConfigurationSource; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.URISyntaxException; import java.net.URL; public class IOUtils { private static final int EOF = -1; private static final int BUFFER_SIZE = 4096; private static final Logger logger = LoggerFactory.getLogger(IOUtils.class); private IOUtils() { } public static void copy(InputStream input, OutputStream output) throws IOException { int n; final byte[] buffer = new byte[BUFFER_SIZE]; while (EOF != (n = input.read(buffer))) { output.write(buffer, 0, n); } } public static void write(String str, OutputStream out) throws IOException { out.write(str.getBytes()); } public static String toString(InputStream input) throws IOException { if (input == null) { return null; } final InputStreamReader inputStreamReader = new InputStreamReader(input); final StringBuilder stringBuilder = new StringBuilder(); final char[] buffer = new char[BUFFER_SIZE]; int n = 0; while (EOF != (n = inputStreamReader.read(buffer))) { stringBuilder.append(buffer, 0, n); } return stringBuilder.toString(); } public static void closeQuietly(InputStream is) { if (is != null) { try { is.close(); } catch (IOException e) { // ignore } } } public static void consumeAndClose(InputStream is) { if (is == null) { return; } try { while (is.read() != EOF) {} } catch (IOException e) { logger.warn(e.getMessage(), e); } finally { closeQuietly(is); } } public static InputStream getResourceAsStream(String name) { return IOUtils.class.getClassLoader().getResourceAsStream(name); } public static String getResourceAsString(String name) { try { return toString(getResourceAsStream(name)); } catch (IOException e) { throw new RuntimeException(e); } } public static byte[] readToBytes(InputStream inputStream) throws IOException { if (inputStream == null) { return new byte[0]; } final ByteArrayOutputStream output = new ByteArrayOutputStream(); copy(inputStream, output); return output.toByteArray(); } public static File getFile(String classPathLocation) throws IOException, URISyntaxException { URL resource = PropertyFileConfigurationSource.class.getClassLoader().getResource(classPathLocation); if (resource == null) { resource = new URL("file://" + classPathLocation); } if (!"file".equals(resource.getProtocol())) { throw new IOException("Saving to property files inside a war, ear or jar is not possible."); } return new File(resource.toURI()); } }