// RandomAccessFile.java /* Copyright (C) 1998, 1999 Cygnus Solutions This file is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ package java.io; /** * @author Tom Tromey * @date September 25, 1998 */ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * Status: not finished */ public class RandomAccessFile implements DataOutput, DataInput { public void close () throws IOException { fd.close(); } public final FileDescriptor getFD () throws IOException { if (! fd.valid()) throw new IOException (); return fd; } public long getFilePointer () throws IOException { return fd.getFilePointer(); } public long length () throws IOException { return fd.length(); } public RandomAccessFile (String fileName, String mode) throws IOException { int fdmode; if (mode.compareTo ("r") == 0) fdmode = FileDescriptor.READ; else if (mode.compareTo ("rw") == 0) fdmode = FileDescriptor.READ | FileDescriptor.WRITE; else throw new IllegalArgumentException ("invalid mode: " + mode); SecurityManager s = System.getSecurityManager(); if (s != null) { s.checkRead(fileName); if ((fdmode & FileDescriptor.WRITE) != 0) s.checkWrite(fileName); } fd = new FileDescriptor (fileName, fdmode); // FIXME: read-only mode. out = new DataOutputStream (new FileOutputStream (fd)); in = new DataInputStream (new FileInputStream (fd)); } public RandomAccessFile (File file, String mode) throws IOException { this (file.getPath(), mode); } public int read () throws IOException { return in.read(); } public int read (byte[] buffer) throws IOException { return in.read(buffer); } public int read (byte[] buffer, int offset, int count) throws IOException { return in.read(buffer, offset, count); } public final boolean readBoolean () throws IOException { return in.readBoolean(); } public final byte readByte () throws IOException { return in.readByte(); } public final char readChar () throws IOException { return in.readChar(); } public final double readDouble () throws IOException { return in.readDouble(); } public final float readFloat () throws IOException { return in.readFloat(); } public final void readFully (byte[] buffer) throws IOException { // FIXME. } public final void readFully (byte[] buffer, int offset, int count) throws IOException { // FIXME. } public final int readInt () throws IOException { return in.readInt(); } public final String readLine () throws IOException { // FIXME? return in.readLine(); } public final long readLong () throws IOException { return in.readLong(); } public final short readShort () throws IOException { return in.readShort(); } public final int readUnsignedByte () throws IOException { return in.readUnsignedByte(); } public final int readUnsignedShort () throws IOException { return in.readUnsignedShort(); } public final String readUTF () throws IOException { return in.readUTF(); } public void seek (long pos) throws IOException { fd.seek(pos, FileDescriptor.SET); } public int skipBytes (int count) throws IOException { return fd.seek(count, FileDescriptor.CUR); } public void write (int oneByte) throws IOException { out.write(oneByte); } public void write (byte[] buffer) throws IOException { out.write(buffer); } public void write (byte[] buffer, int offset, int count) throws IOException { out.write(buffer, offset, count); } public final void writeBoolean (boolean val) throws IOException { out.writeBoolean(val); } public final void writeByte (int v) throws IOException { out.writeByte(v); } public final void writeShort (int v) throws IOException { out.writeShort(v); } public final void writeChar (int v) throws IOException { out.writeChar(v); } public final void writeInt (int v) throws IOException { out.writeInt(v); } public final void writeLong (long v) throws IOException { out.writeLong(v); } public final void writeFloat (float v) throws IOException { out.writeFloat(v); } public final void writeDouble (double v) throws IOException { out.writeDouble(v); } public final void writeBytes (String s) throws IOException { out.writeBytes(s); } public final void writeChars (String s) throws IOException { out.writeChars(s); } public final void writeUTF (String s) throws IOException { out.writeUTF(s); } // The underlying file. private FileDescriptor fd; // The corresponding input and output streams. private DataOutputStream out; private DataInputStream in; }