1 / 39

Lecture 20: Java File I/o

CSC 213 – Large Scale Programming. Lecture 20: Java File I/o. Project #1 Recap. Today's Goals. Today's Goals. Discuss reasons why files & file I/O important When & where used and what real value does it offer? Show how to read & write text to files in Java

bianca
Download Presentation

Lecture 20: Java File I/o

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. CSC 213 – Large Scale Programming Lecture 20: Java File I/o

  2. Project #1 Recap

  3. Today's Goals

  4. Today's Goals • Discuss reasons why files & file I/O important • When & where used and what real value does it offer? • Show how to read & write text to files in Java • Classes & methods needed to perform these actions • How these methods move through file as they work • Limits of these actions & why we might want more • Discuss another approach: RandomAccessFiles • Benefits of using this for reading & writing data • How this also has additional ways to access data

  5. Image To Sharpen • I have a (fuzzy) 1024 x 768 picture to sharpen • Only 786,432 numbers to type into photo application • After analysis, must click & update each pixel

  6. Image To Sharpen • I have a (fuzzy) 1024 x 768 picture to sharpen • Only 786,432 numbers to type into photo application • After analysis, must click & update each pixel

  7. More Data Entry Positions • Testing improved jet designs for oeingB-ay • Using program to simulate designs' lift & drag • 5 possible designs (each 150MB) to test this iteration • Once results available, will tweak & retest designs • Need room of touch typists for all this data entry

  8. This Is (Semi-Real) Problem • Large hadron collider about to come on-line • No black hole when smashing particles at high speeds • Creates 28.5 GB/minfor nerds seeking truth & beauty

  9. This Is (Semi-Real) Problem • Large hadron collider about to come on-line • No black hole when smashing particles at high speeds • Creates 28.5 GB/minfor nerds seeking truth & beauty

  10. This Is (Semi-Real) Problem • Large hadron collider about to come on-line • No black hole when smashing particles at high speeds • Creates 28.5 GB/minfor nerds seeking truth & beauty • Hired trained monkeys to type data into programs

  11. This Is (Semi-Real) Problem • Large hadron collider about to come on-line • No black hole when smashing particles at high speeds • Creates 28.5 GB/minfor nerds seeking truth & beauty • Hired trained monkeys to type data into programs college students

  12. This Is (Semi-Real) Problem • Large hadron collider about to come on-line • No black hole when smashing particles at high speeds • Creates 28.5 GB/minfor nerds seeking truth & beauty • Hired trained monkeys to type data into programs college students

  13. Yeah, Right

  14. Yeah, Right • Real world demands we use files for most I/O • Data files used to start and/or end most projects • May contain: game levels, analysis results, CCD pics • Way to read & write files needed to be useful

  15. Reading a Text File • Must first instantiate java.io.File object • Pass String filename to the File constructor • Throws a (checked) exception if file does not exist • Another IOException possible for other odd errors • Once created, use File to create Scanner • Reads file's data rather than typing into keyboard • At the same time, works like any other Scanner

  16. Reading a Text File try {File readFile = new File("bob.dat");Scanner scan = new Scanner(readFile);while (scan.hasNext()) { String line = scan.nextLine();System.out.println(line);}scan.close(); } catch (FileNotFoundExceptionfnfe) {System.err.println("Make the file, moron!"); } catch (IOExceptionioe) {ioe.printStackTrace(); }

  17. Typical File I/O • Ordinarily we read files sequentially Scannerscan ;// Instantiate a Scannerscanfor the “file” belowchar c = ‘’;while (c != ‘s’) { c = scan.nextChar();} Are 10^15 Files Just a Peta-File? scan

  18. Typical File I/O • Ordinarily we read files sequentially Scannerscan ;// Instantiate a Scannerscanfor the “file” belowchar c = ‘’;while (c != ‘s’) { c = scan.nextChar();} Are 10^15 Files Just a Peta-File? scan

  19. Typical File I/O • Ordinarily we read files sequentially Scannerscan ;// Instantiate a Scannerscanfor the “file” belowchar c = ‘’;while (c != ‘s’) { c = scan.nextChar();} Are 10^15 Files Just a Peta-File? scan

  20. Typical File I/O • Ordinarily we read files sequentially Scannerscan ;// Instantiate a Scannerscanfor the “file” belowchar c = ‘’;while (c != ‘s’) { c = scan.nextChar();} Are 10^15 Files Just a Peta-File? scan

  21. Typical File I/O • Ordinarily we read files sequentially Scannerscan ;// Instantiate a Scannerscanfor the “file” belowchar c = ‘’;while (c != ‘s’) { c = scan.nextChar();} Are 10^15 Files Just a Peta-File? scan

  22. Writing a Text File • Writing a text file only slightly more complicated • Console is file in Unix, so can guess where this goes • Need to first decide what should happen to file • Easy if file does not exist create file & write to it • Else what should happen to file's current contents? • Mode used at opening determines file's contents • If opening file in write mode, erases file at the start • Starts at end of file in append mode, saving the data

  23. Opening File For Writing • Create instance of java.io.FileWriter • Must specify mode to open file at this time • Be very careful with this – there is no undo here! • If file is impossible and so cannot be written to • Cannot be done, so system throws IOException • Not told if file existed before this command FileWriternuked=new FileWriter("boom.t", false); FileWritersaved = new FileWriter("ScoreOnRebound",true);

  24. Second Step To Writing Files • FileWriter helps, but slow and hard to use • Faster, simpler approach would be much nicer • Using FileWritercreate BufferedWriter • Cannot change mode; must take care initially • Two methods used to write out data to file • Both methods will expand file & advance pointer • Start writing new line – newLine() • write(String s)– writes sto file • End writing & save results with close()

  25. Writing a Text File try {FileWriterfw = new FileWriter(“b.t”, true);BufferedWriterbw = new BufferedWriter(fw);for (inti = 10; i > 0; i--) {bw.write(“T minus ”);bw.write(i + “”);bw.newLine();}bw.write(“Blast off!”); bw.close(); }catch (IOExceptionioe) {ioe.printStackTrace(); }

  26. Its Not All Text • We often want to store more than just text • Translate numbers into binary to be used in program • Storing as text wastes time converting back & forth • (Often) Space also wasted for larger numbers • Could instead store numbers in binary format • Optimized for machine, as not easily human-readable • But how often do we look at numbers in image file? • Easy to determine sizes; each type has specific length • To enable binary formats, use different File class

  27. RandomAccessFile • Built into Java's standard set of classes • Found in the java.io package • New or existing files can be accessed with it RandomAccessFileraf = new RandomAccessFile("f.txt","rw"); • First argument ("f.txt") is name of file used • Access to file specified ("rw") in second parameter • Using write access ("w") erases any data in the file • Read & write anywhere in file using instance

  28. Reading RandomAccessFile • Defines methods to read most primitive types:booleanreadBoolean()intreadInt() double readDouble() • Reads & returns value read from file • Binary encoding used automatically • File will store 32-bit int, not "125" • Not human readable, but not really needed • Can shrink files; always makes sizes predictable

  29. Reading RandomAccessFile • Reading Strings takes a little extra workString readUTF() • Requires that String was recorded in UTF format • Not totally readable, but makes sense to machines • Or use readChar()to read in String… • …but need null character ('\0') at end • End of String not easy to find without some hint • Also remember that Java’s char not always readable • readByte()is readable, but needs typecast

  30. Writing RandomAccessFile • Also defines methods to write to a file: void writeInt(inti) void writeDouble(double d)void writeUTF(String s) • Writes value at location in the file we are currently at • As it is needed, methods extend file also • When writing data, erases anything there previously

  31. RandomAccessFile I/O • Unless specified stillread &write sequentially RandomAccessFileraf = new …;char c = ‘’;while (c != ‘s’) { c = (char)raf.readByte();raf.writeByte((byte)c);} Could I rename machine "PetaHertz"

  32. Skipping Around The File • RandomAccessFile allows moving in the file • Skip past sections using intskipBytes(int n) • void seek(long pos)moves to position in file • Positions specified as bytes from beginning of file

  33. RandomAccessFile I/O • Sequential access is no longer required RandomAccessFileraf = new …;char c;raf.skipBytes(raf.length()-1);c = (char)raf.readByte();raf.seek(0);raf.writeByte((byte)c); Could I rename machine "PetaHertz"

  34. RandomAccessFile I/O • Sequential access is no longer required RandomAccessFileraf = new …;char c;raf.skipBytes(raf.length()-1);c = (char)raf.readByte();raf.seek(0);raf.writeByte((byte)c); Could I rename machine "PetaHertz"

  35. RandomAccessFile I/O • Sequential access is no longer required RandomAccessFileraf = new …;char c;raf.skipBytes(raf.length()-1);c = (char)raf.readByte();raf.seek(0);raf.writeByte((byte)c); Could I rename machine "PetaHertz"

  36. RandomAccessFile I/O • Sequential access is no longer required RandomAccessFileraf = new …;char c;raf.skipBytes(raf.length()-1);c = (char)raf.readByte();raf.seek(0);raf.writeByte((byte)c); Could I rename machine "PetaHertz"

  37. RandomAccessFile I/O • Sequential access is no longer required RandomAccessFileraf = new …;char c;raf.skipBytes(raf.length()-1);c = (char)raf.readByte();raf.seek(0);raf.writeByte((byte)c); "ould I rename machine "PetaHertz"

  38. For Next Lecture

  39. For Next Lecture • Week #7 assignmentavailable on Angel • Still have time to talk to me; due Tuesday at 5PM • Will talk about indexed files on Wednesday • Why does Oracle love them & heavily rely on them? • Why does CS department require you to learn them? • Why do you feel like they are key idea for project #2? • Midterm #1 in class on Friday • Open-book, open-note exam (as usual) • Use any lecture’s slides IF you have notes on them • Ask me questions ASAP; I leave for conference Wed.

More Related