view src/luan/lib/Utils.java @ 143:fcb81fa2df0d

handle urls and java resources as files git-svn-id: https://luan-java.googlecode.com/svn/trunk@144 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 13 Jun 2014 19:04:05 +0000
parents 0594c132888b
children d310ebf4d6e7
line wrap: on
line source

package luan.lib;

import java.io.Reader;
import java.io.IOException;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.File;
import java.net.URL;
import java.net.MalformedURLException;
import luan.LuanState;
import luan.LuanException;


public final class Utils {
	private Utils() {}  // never

	static final int bufSize = 8192;

	public static void checkNotNull(LuanState luan,Object v,String expected) throws LuanException {
		if( v == null )
			throw luan.exception("bad argument #1 ("+expected+" expected, got nil)");
	}

	public static String readAll(Reader in)
		throws IOException
	{
		char[] a = new char[bufSize];
		StringBuilder buf = new StringBuilder();
		int n;
		while( (n=in.read(a)) != -1 ) {
			buf.append(a,0,n);
		}
		return buf.toString();
	}

	public static void copyAll(InputStream in,OutputStream out)
		throws IOException
	{
		byte[] a = new byte[bufSize];
		int n;
		while( (n=in.read(a)) != -1 ) {
			out.write(a,0,n);
		}
	}

	public static byte[] readAll(InputStream in)
		throws IOException
	{
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		copyAll(in,out);
		return out.toByteArray();
	}

	public static boolean isFile(String path) {
		return new File(path).exists();
	}

	public static String toUrl(String path) {
		if( path.indexOf(':') == -1 )
			return null;
		if( path.startsWith("java:") ) {
			path = path.substring(5);
			URL url = ClassLoader.getSystemResource(path);
			return url==null ? null : url.toString();
		}
		try {
			new URL(path);
			return path;
		} catch(MalformedURLException e) {}
		return null;
	}

	public static boolean exists(String path) {
		return isFile(path) || toUrl(path)!=null;
	}
}