1 / 29

Random Access Files

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.

simmonsp
Download Presentation

Random Access Files

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Random Access Files CSC 171 FALL 2004 LECTURE 23

  2. Sequential 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

  3. Random/Direct Access • The middle of the file can be • Retrieved • Modified • Rewritten without reading/writing other data • Good for data base applications

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

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

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

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

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

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

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

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

  12. File Structure • The key to random access is file structure • Most 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)

  13. RandomAccessFile Class RandomAccessFile raf = new RandomAccessFile(“products.dat”,”rw”); • File name • Mode • “r” for read only • “rw” for read & write

  14. Pointer 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

  15. Example: Reverse a file • Consider the problem of reversing a file with sequential access

  16. 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(); } }

  17. 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

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

  19. // set up the keyboard for string input InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr);

  20. 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); }

  21. Read & Print the File System.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); }

  22. OUTPUT cd d:/courses/CSC171/CSC171FALL2001/code/bronson/ d:/devenv/jdk1.3/bin/javaw ReadRandom Quantity ID. 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

  23. Modify The Database • Set up Keyboard • Open file • Loop as long as user wants to modify • Querry for ID number • Look up & display quantity • Querry for modification • Write modified value • Close file

  24. Loop & querry ID while (!acctstring.equals("999")) { recnum = Integer.parseInt(acctstring) - BASEREC; position = (recnum - 1) * RECLEN;

  25. Move to the record raf.seek(position); acct = raf.readInt(); //save loc ready to read/write amnt setbytepos = raf.getFilePointer(); amt = raf.readInt(); System.out.println("The current quantity in stock is: " + amt);

  26. UPDATE System.out.print("Enter the new quantity: "); amtstring = br.readLine(); amt = Integer.parseInt(amtstring); raf.seek(setbytepos);//reset loc raf.writeInt(amt);

More Related