random access files

29
Random Access Files Random Access Files CSC 171 FALL 2004 LECTURE 23

Upload: curry

Post on 21-Jan-2016

49 views

Category:

Documents


0 download

DESCRIPTION

Random Access Files. CSC 171 FALL 2004 LECTURE 23. Sequential File Access. Sequential access Data in files are accessed one item after another The 4 th item cannot be read without reading the first 3 items Imagine updating the 1000000 th item and then updating the 999999 th. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Random Access Files

Random Access FilesRandom Access Files

CSC 171 FALL 2004

LECTURE 23

Page 2: Random Access Files

Sequential File AccessSequential File Access

Sequential access– Data in files are accessed one item after another– The 4th item cannot be read without reading the

first 3 items– Imagine updating the 1000000th item and then

updating the 999999th

Page 3: Random Access Files

Random/Direct AccessRandom/Direct Access

The middle of the file can be – Retrieved– Modified– Rewritten

without reading/writing other dataGood for data base applications

Page 4: Random Access Files
Page 5: Random Access Files
Page 6: Random Access Files

In a ___________________ file access, a file is processed a byte at a time, in order.

Page 7: Random Access Files

In a ____sequential____ file access, a file is processed a byte at a time, in order.

Page 8: Random Access Files

______________ access allow access at arbitrary locations in the file, without first reading the bytes preceding the access location.

Page 9: Random Access Files

__Random______ access allow access at arbitrary locations in the file, without first reading the bytes preceding the access location.

Page 10: Random Access Files

A file _____________ is a position in a random-access file.

Page 11: Random Access Files

A file ____pointer___________ is a position in a random-access file.

Page 12: Random Access Files

Because files can be very large a file pointer is of type ____________.

Page 13: Random Access Files

Because files can be very large a file pointer is of type ___long___.

Page 14: Random Access Files

File StructureFile Structure

The key to random access is file structureMost commonly

– Fixed length records consisting of Fixed length items

Example: Inventory control (16 byte record)– Product ID code (int – 4 bytes)– Quantity in stock (int – 4 bytes)– Price (double – 8 bytes)

Page 15: Random Access Files
Page 16: Random Access Files

RandomAccessFile ClassRandomAccessFile Class

RandomAccessFile raf = new RandomAccessFile(“products.dat”,”rw”);

– File name– Mode

“r” for read only “rw” for read & write

Page 17: Random Access Files

Pointer PositionPointer Position

Each random access stream establishes an internal pointer position

The pointer keeps track of where the next byte is to be accessed

The seek(long i) method permits the programmer to move to any byte position– 1st byte @ position 0

Page 18: Random Access Files

Example: Reverse a fileExample: Reverse a file

Consider the problem of reversing a file with sequential access

Page 19: Random Access Files

RandomAccessFile raf = new RandomAccessFile(fileName,"rw");

last = raf.length();

position = last - SIZEOFCHAR;while (position >= 0) { raf.seek(position); ch = (char)raf.readByte(); System.out.print(ch+"|"); position = position - SIZEOFCHAR;}raf.close();

}}

Page 20: Random Access Files

test.dat

 

This is a test.

 

OUTPUT

 

cd d:/courses/CSC171/CSC171FALL2001/code/

d:/devenv/jdk1.3/bin/javaw DisplayReversed

 

.|t|s|e|t| |a| |s|i| |s|i|h|T|

Process DisplayReversed finished

Page 21: Random Access Files

Example: InventoryExample: Inventory

Inventory control (16 byte record)– Product ID code (int – 4 bytes)– Quantity in stock (int – 4 bytes)– Price (double – 8 bytes)

Page 22: Random Access Files

// set up the keyboard for string input

InputStreamReader isr =

new InputStreamReader(System.in);

BufferedReader br =

new BufferedReader(isr); 

Page 23: Random Access Files

for(int i = 1; i <= 5; i++)

{

System.out.print("Enter the identification number: ");

acctstring = br.readLine();

acct = Integer.parseInt(acctstring);

raf.writeInt(acct);

System.out.print("Enter the quantity in stock: ");

amtstring = br.readLine();

amt = Integer.parseInt(amtstring);

raf.writeInt(amt);

System.out.print("Enter the price: ");

pricestring = br.readLine();

price = Double.parseDouble(pricestring);

raf.writeDouble(price);

}

Page 24: Random Access Files

Read & Print the FileRead & Print the FileSystem.out.println(" Quantity");

System.out.println("ID. No. In Stock Price");

System.out.println("------- -------- ------");

 

// read and print the data

for(int i = 1; i <= 5; i++){

acct = raf.readInt();

amt = raf.readInt();

price = raf.readDouble();

System.out.println(" " + acct + " "

+ amt + " $" + price);

}

Page 25: Random Access Files

OUTPUTOUTPUTcd d:/courses/CSC171/CSC171FALL2001/code/bronson/d:/devenv/jdk1.3/bin/javaw ReadRandom   QuantityID. No. In Stock Price------- -------- ------ 1001 476 $28.35 1002 240 $32.56 1003 517 $51.27 1004 284 $23.75 1005 165 $32.25 Process ReadRandom finished

Page 26: Random Access Files

Modify The DatabaseModify The DatabaseSet up KeyboardOpen fileLoop as long as user wants to modify

– Querry for ID number– Look up & display quantity– Querry for modification– Write modified value

Close file

Page 27: Random Access Files

Loop & querry IDLoop & querry ID

while (!acctstring.equals("999")) {

recnum = Integer.parseInt(acctstring) - BASEREC;

position = (recnum - 1) * RECLEN;

Page 28: Random Access Files

Move to the recordMove to the recordraf.seek(position); acct = raf.readInt();

//save loc ready to read/write amntsetbytepos = raf.getFilePointer(); amt = raf.readInt();System.out.println("The current quantity in stock is: " + amt);

Page 29: Random Access Files

UPDATEUPDATE

System.out.print("Enter the new quantity: ");

amtstring = br.readLine();

amt = Integer.parseInt(amtstring);

raf.seek(setbytepos); //reset loc

raf.writeInt(amt);