csc 213 large scale programming
Download
Skip this Video
Download Presentation
Lecture 20: Java File I/o

Loading in 2 Seconds...

play fullscreen
1 / 35

Lecture 20: Java File I/o - PowerPoint PPT Presentation


  • 104 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Lecture 20: Java File I/o' - patty


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
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
    • 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
image to sharpen
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
image to sharpen1
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
more data entry positions
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
this is semi real problem
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
this is semi real problem1
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
this is semi real problem2
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
this is semi real problem3
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
yeah right1
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
reading a text file
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
reading a text file1
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();

}

typical file i o
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

typical file i o1
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

typical file i o2
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

typical file i o3
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

typical file i o4
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

writing a text file
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
opening file for writing
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);

second step to writing files
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()
writing a text file1
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();

}

its not all text
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
randomaccessfile
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
reading randomaccessfile
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
reading randomaccessfile1
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
writing randomaccessfile
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
randomaccessfile i o
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"

skipping around the file
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
randomaccessfile i o1
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"

randomaccessfile i o2
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"

randomaccessfile i o3
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"

randomaccessfile i o4
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"

randomaccessfile i o5
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"

for next lecture
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?
ad