Java tutorial
/* GNU LESSER GENERAL PUBLIC LICENSE Copyright (C) 2006 The Lobo Project This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Contact info: lobochief@users.sourceforge.net */ /* * Created on Mar 19, 2005 */ import java.io.*; /** * @author J. H. S. */ public class IORoutines { public static final byte[] LINE_BREAK_BYTES = { (byte) 13, (byte) 10 }; public static String loadAsText(InputStream in, String encoding) throws IOException { return loadAsText(in, encoding, 4096); } public static String loadAsText(InputStream in, String encoding, int bufferSize) throws IOException { InputStreamReader reader = new InputStreamReader(in, encoding); char[] buffer = new char[bufferSize]; int offset = 0; for (;;) { int remain = buffer.length - offset; if (remain <= 0) { char[] newBuffer = new char[buffer.length * 2]; System.arraycopy(buffer, 0, newBuffer, 0, offset); buffer = newBuffer; remain = buffer.length - offset; } int numRead = reader.read(buffer, offset, remain); if (numRead == -1) { break; } offset += numRead; } return new String(buffer, 0, offset); } public static byte[] load(File file) throws IOException { long fileLength = file.length(); if (fileLength > Integer.MAX_VALUE) { throw new IOException("File '" + file.getName() + "' too big"); } InputStream in = new FileInputStream(file); try { return loadExact(in, (int) fileLength); } finally { in.close(); } } public static byte[] load(InputStream in) throws IOException { return load(in, 4096); } public static byte[] load(InputStream in, int initialBufferSize) throws IOException { if (initialBufferSize == 0) { initialBufferSize = 1; } byte[] buffer = new byte[initialBufferSize]; int offset = 0; for (;;) { int remain = buffer.length - offset; if (remain <= 0) { int newSize = buffer.length * 2; byte[] newBuffer = new byte[newSize]; System.arraycopy(buffer, 0, newBuffer, 0, offset); buffer = newBuffer; remain = buffer.length - offset; } int numRead = in.read(buffer, offset, remain); if (numRead == -1) { break; } offset += numRead; } if (offset < buffer.length) { byte[] newBuffer = new byte[offset]; System.arraycopy(buffer, 0, newBuffer, 0, offset); buffer = newBuffer; } return buffer; } public static byte[] loadExact(InputStream in, int length) throws IOException { byte[] buffer = new byte[length]; int offset = 0; for (;;) { int remain = length - offset; if (remain <= 0) { break; } int numRead = in.read(buffer, offset, remain); if (numRead == -1) { throw new IOException("Reached EOF, read " + offset + " expecting " + length); } offset += numRead; } return buffer; } public static boolean equalContent(File file, byte[] content) throws IOException { long length = file.length(); if (length > Integer.MAX_VALUE) { throw new IOException("File '" + file + "' too big"); } InputStream in = new FileInputStream(file); try { byte[] fileContent = loadExact(in, (int) length); return java.util.Arrays.equals(content, fileContent); } finally { in.close(); } } public static void save(File file, byte[] content) throws IOException { FileOutputStream out = new FileOutputStream(file); try { out.write(content); } finally { out.close(); } } /** * Reads line without buffering. */ public static String readLine(InputStream in) throws IOException { int b; StringBuffer sb = null; OUTER: while ((b = in.read()) != -1) { if (sb == null) { sb = new StringBuffer(); } switch (b) { case (byte) '\n': break OUTER; case (byte) '\r': break; default: sb.append((char) b); break; } } return sb == null ? null : sb.toString(); } public static void touch(File file) { file.setLastModified(System.currentTimeMillis()); } public static void saveStrings(File file, java.util.Collection list) throws IOException { BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(file)); try { PrintWriter writer = new PrintWriter(bout); java.util.Iterator i = list.iterator(); while (i.hasNext()) { String text = (String) i.next(); writer.println(text); } writer.flush(); } finally { bout.close(); } } public static java.util.List loadStrings(File file) throws IOException { java.util.List list = new java.util.LinkedList(); InputStream in = new FileInputStream(file); try { BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line; while ((line = reader.readLine()) != null) { list.add(line); } return list; } finally { in.close(); } } }