Here are some of the methods that you may need:
The following code shows how to use the RandomAccessFile class. The random access file in this example is a binary file called accounts.
import java.io.*;
public class RandomFile
{
final static int LONG_SIZE = 8;
final static int DOUBLE_SIZE = 8;
final static int RECORD_SIZE = LONG_SIZE + DOUBLE_SIZE;
static RandomAccessFile file;
static long numAccounts = 0;
public static void updateHeader ( double newBalance ) throws IOException
{
file.seek ( 0 );
file.writeLong ( numAccounts );
double tmpBal;
if ( numAccounts == 0 )
tmpBal = newBalance;
else
{
tmpBal = file.readDouble ();
tmpBal += newBalance;
}
file.seek ( LONG_SIZE );
file.writeDouble ( tmpBal );
}
public static void writeHeader ( ) throws IOException
{
file.seek ( 0 );
System.out.println ( "The number of accounts = " + file.readLong() );
System.out.println ( "The total balance = " + file.readDouble() );
}
public static void createAccount ( double newBalance ) throws IOException
{
numAccounts++;
file.seek ( numAccounts * RECORD_SIZE );
file.writeLong ( numAccounts );
file.writeDouble ( newBalance );
updateHeader ( newBalance );
}
public static int fileSize ( ) throws IOException
{
return ( int ) ( file.length() / RECORD_SIZE );
}
public static void scanFile () throws IOException
{
file.seek ( 0 );
long numRecords = file.readLong ();
double sumBalance = file.readDouble ();
long account;
double balance;
for (long i = 1; i <= numRecords; i++ )
{
account = file.readLong ();
balance = file.readDouble ();
System.out.println ("Account number: " + account + " " +
"Balance: " + balance );
}
}
public static void main ( String args[] ) throws IOException
{
// Create random access file and update header
file = new RandomAccessFile ("accounts", "rw");
double sumBalance = 0.0;
updateHeader ( sumBalance );
// Create account and update header
double newBalance = 1000.0;
createAccount ( newBalance );
// Create another account and update header
newBalance = 2000.0;
createAccount ( newBalance );
// Create another account and update header
newBalance = 3000.0;
createAccount ( newBalance );
// Write out the size of the file
System.out.println ( "The number of records in the file is " + fileSize( ) );
// Write out the header of the file
writeHeader ();
// Scan the file
scanFile ();
}
}