package at.gv.egovernment.moa.util;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

/**
 * Utility for accessing files on the file system, and for reading from input streams.
 * @author Paul Ivancsics
 * @version $Id$
 */
public class FileUtils {
  
  /**
   * Reads a file, given by URL, into a byte array.
   * @param urlString file URL
   * @return file content
   * @throws IOException on any exception thrown
   */
  public static byte[] readURL(String urlString) throws IOException {
    URL url = new URL(urlString);
    InputStream in = new BufferedInputStream(url.openStream());
    byte[] content = StreamUtils.readStream(in);
    in.close();
    return content;
  }
  /**
   * Reads a file, given by URL, into a String.
   * @param urlString file URL
   * @param encoding character encoding
   * @return file content
   * @throws IOException on any exception thrown
   */
  public static String readURL(String urlString, String encoding) throws IOException {
    byte[] content = readURL(urlString);
    return new String(content, encoding);
  }
  /**
   * Reads a file, given by filename, into a byte array.
   * @param filename filename
   * @return file content
   * @throws IOException on any exception thrown
   */
  public static byte[] readFile(String filename) throws IOException {
    BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename));
    byte[] content = StreamUtils.readStream(in);
    in.close();
    return content;
  }
  /**
   * Reads a file, given by filename, into a String.
   * @param filename filename
   * @param encoding character encoding
   * @return file content
   * @throws IOException on any exception thrown
   */
  public static String readFile(String filename, String encoding) throws IOException {
    byte[] content = readFile(filename);
    return new String(content, encoding);
  }
  /**
   * Reads a file from a resource.
   * @param name resource name
   * @return file content as a byte array
   * @throws IOException on any exception thrown
   */
  public static byte[] readResource(String name) throws IOException {
    ClassLoader cl = FileUtils.class.getClassLoader();
    BufferedInputStream in = new BufferedInputStream(cl.getResourceAsStream(name));
    byte[] content = StreamUtils.readStream(in);
    in.close();
    return content;
  }
  /**
   * Reads a file from a resource.
   * @param name filename
   * @param encoding character encoding
   * @return file content
   * @throws IOException on any exception thrown
   */
  public static String readResource(String name, String encoding) throws IOException {
    byte[] content = readResource(name);
    return new String(content, encoding);
  }
}