Csc 213 large scale programming
This presentation is the property of its rightful owner.
Sponsored Links
1 / 35

Lecture 20: Java File I/o PowerPoint PPT Presentation


  • 82 Views
  • Uploaded on
  • Presentation posted in: General

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

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


Csc 213 large scale programming

CSC 213 – Large Scale Programming

Lecture 20: Java File I/o


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 right

Yeah, Right


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?


  • Login