/* * Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License, * Version 1.0, and under the Eclipse Public License, Version 1.0 * (http://h2database.com/html/license.html). * Initial Developer: H2 Group */ package org.h2.samples; import java.io.IOException; import java.io.RandomAccessFile; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; /** * This sample application shows how to create a user defined function * to read a file from the file system. */ public class FileFunctions { /** * This method is called when executing this sample application from the * command line. * * @param args the command line parameters */ public static void main(String... args) throws Exception { Class.forName("org.h2.Driver"); Connection conn = DriverManager.getConnection("jdbc:h2:mem:", "sa", ""); Statement stat = conn.createStatement(); stat.execute("CREATE ALIAS READ_TEXT_FILE " + "FOR \"org.h2.samples.FileFunctions.readTextFile\" "); stat.execute("CREATE ALIAS READ_TEXT_FILE_WITH_ENCODING " + "FOR \"org.h2.samples.FileFunctions.readTextFileWithEncoding\" "); stat.execute("CREATE ALIAS READ_FILE " + "FOR \"org.h2.samples.FileFunctions.readFile\" "); ResultSet rs = stat.executeQuery("CALL READ_FILE('test.txt')"); rs.next(); byte[] data = rs.getBytes(1); System.out.println("length: " + data.length); rs = stat.executeQuery("CALL READ_TEXT_FILE('test.txt')"); rs.next(); String text = rs.getString(1); System.out.println("text: " + text); stat.close(); conn.close(); } /** * Read a String from a file. The default encoding for this platform is used. * * @param fileName the file name * @return the text */ public static String readTextFile(String fileName) throws IOException { byte[] buff = readFile(fileName); String s = new String(buff); return s; } /** * Read a String from a file using the specified encoding. * * @param fileName the file name * @param encoding the encoding * @return the text */ public static String readTextFileWithEncoding(String fileName, String encoding) throws IOException { byte[] buff = readFile(fileName); String s = new String(buff, encoding); return s; } /** * Read a file into a byte array. * * @param fileName the file name * @return the byte array */ public static byte[] readFile(String fileName) throws IOException { RandomAccessFile file = new RandomAccessFile(fileName, "r"); try { byte[] buff = new byte[(int) file.length()]; file.readFully(buff); return buff; } finally { file.close(); } } }