/*******************************************************************************
* Copyright (c) 2013 Pivotal Software, 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:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.springsource.ide.eclipse.commons.frameworks.core.util;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
public class IOUtil {
/**
* Copy data from an inputstream into a file until end of the inputstream
* is reached.
* <p>
* The input stream is closed automatically.
*/
public static void pipe(InputStream data, File target) throws IOException {
target.getParentFile().mkdirs(); //try to create dirs for parent if they don't exist.
OutputStream out = new BufferedOutputStream(new FileOutputStream(target));
try {
pipe(data, out);
} finally {
out.close();
}
}
/**
* Copy input stream to output stream until end of the inputstream is reached.
* The intpustream is closed automatically, but the output stream is not.
*/
public static void pipe(InputStream input, OutputStream output) throws IOException {
try {
byte[] buf = new byte[1024*4];
int n = input.read(buf);
while (n >= 0) {
output.write(buf, 0, n);
n = input.read(buf);
}
output.flush();
} finally {
input.close();
}
}
public static String toString(InputStream input) throws Exception {
return toString(input, "UTF8");
}
private static String toString(InputStream input, String encoding) throws Exception {
ByteArrayOutputStream buf = new ByteArrayOutputStream();
pipe(input, buf);
return buf.toString(encoding);
}
/**
* Sick and tired of writing try-catch around close calls... If something can't close, it usually means it
* was already closed, no longer exists etc. This method catches and ignores the exceptions.
*/
public static void close(Closeable closeable) {
try {
closeable.close();
} catch (IOException e) {
//ignore
}
}
public static byte[] toBytes(InputStream stream) throws IOException {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
pipe(stream, bytes);
return bytes.toByteArray();
}
}