1 / 35

Lecture 20: Java File I/o

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

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

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

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

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

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

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

  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 • Hired trained monkeys to type data into programs college students

  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 • Hired trained monkeys to type data into programs college students

  10. Yeah, Right

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

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

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

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

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

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

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

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

  21. 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()

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

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

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

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

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

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

  28. 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"

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

  30. 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"

  31. 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"

  32. 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"

  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); "ould I rename machine "PetaHertz"

  35. For Next Lecture • Angel still shows no weekly assignment • Will be returning this week; no new rules will apply • 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?

More Related