edsger dijkstra

29
Edsger Dijkstra [M]ost important, but also most elusive, aspect of any tool is its influence on the habits of those who train themselves in its use.

Upload: saxton

Post on 24-Feb-2016

59 views

Category:

Documents


0 download

DESCRIPTION

[M]ost important , but also most elusive, aspect of any tool is its influence on the habits of those who train themselves in its use. . Edsger Dijkstra. CSC 213 – Large Scale Programming. Lecture 10: File I/o In JAva. Image To Sharpen. I have a (fuzzy) 1024 x 768 picture to sharpen - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Edsger Dijkstra

Edsger Dijkstra

[M]ost important, but also most elusive, aspect of any tool is its influence on the

habits of those who train themselves in its use.

Page 2: Edsger Dijkstra

LECTURE 10:FILE I/O IN JAVA

CSC 213 – Large Scale Programming

Page 3: Edsger Dijkstra

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

Page 4: Edsger Dijkstra

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

Page 5: Edsger Dijkstra

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/min for nerds seeking

truth & beauty

Page 6: Edsger Dijkstra

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/min for nerds seeking

truth & beauty Hired trained monkeys to type data into

programs

Page 7: Edsger Dijkstra

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/min for nerds seeking

truth & beauty Hired trained monkeys to type data into

programs college students

Page 8: Edsger Dijkstra

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

Page 9: Edsger Dijkstra

Reading Text File

Surprise! Already know how to do this work In fact, this is part of Java been using for

long time Based upon Unix arcana that is suddenly

relevant Unix (& Java) treat everything as file

Keyboards, files, network connections, mice, etc.

java.util.Scanner works with all files Change constructor call & this will be good

to go

Page 10: Edsger Dijkstra

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

Page 11: Edsger Dijkstra

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 (FileNotFoundException fnfe) {System.err.println("Make the file, moron!");

} catch (IOException ioe) {ioe.printStackTrace();

}

Page 12: Edsger Dijkstra

Typical File I/O

Ordinarily we read files sequentiallyScanner scan ;// Instantiate a Scanner scan for the “file” belowchar c = ‘’;while (c != ‘s’) {

c = scan.nextChar(); }

scan

This is an example file we access

Page 13: Edsger Dijkstra

Typical File I/O

Ordinarily we read files sequentiallyScanner scan ;// Instantiate a Scanner scan for the “file” belowchar c = ‘’;while (c != ‘s’) {

c = scan.nextChar(); }

scan

This is an example file we access

Page 14: Edsger Dijkstra

Typical File I/O

Ordinarily we read files sequentiallyScanner scan ;// Instantiate a Scanner scan for the “file” belowchar c = ‘’;while (c != ‘s’) {

c = scan.nextChar(); }

scan

This is an example file we access

Page 15: Edsger Dijkstra

Typical File I/O

Ordinarily we read files sequentiallyScanner scan ;// Instantiate a Scanner scan for the “file” belowchar c = ‘’;while (c != ‘s’) {

c = scan.nextChar(); }

scan

This is an example file we access

Page 16: Edsger Dijkstra

Typical File I/O

Ordinarily we read files sequentiallyScanner scan ;// Instantiate a Scanner scan for the “file” belowchar c = ‘’;while (c != ‘s’) {

c = scan.nextChar(); }

scan

This is an example file we access

Page 17: Edsger Dijkstra

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

Page 18: Edsger Dijkstra

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

FileWriter fw=new FileWriter("b.txt", false);FileWriter app=new FileWriter("bob.java",true);

Page 19: Edsger Dijkstra

Second Step To Writing Files FileWriter helps, but slow and hard to

use Faster, simpler approach would be much

nicer Using FileWriter create 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 s to file

End writing & save results with close()

Page 20: Edsger Dijkstra

Writing a Text File

try {FileWriter fw = new FileWriter(“b.t”, true);BufferedWriter bw = new BufferedWriter(fw);for (int i = 10; i > 0; i--) { bw.write(“T minus ”); bw.write(i + “”); bw.newLine();}bw.write(“Blast off!”); bw.close();

} catch (IOException ioe) {ioe.printStackTrace();

}

Page 21: Edsger Dijkstra

RandomAccessFile

Built into Java's standard set of classes Found in the java.io package

New or existing files can be accessed with itRandomAccessFile raf = 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

Page 22: Edsger Dijkstra

Reading RandomAccessFile

Defines methods to read most primitive types:

boolean readBoolean()int readInt()double readDouble()

Reads & returns value read from file

Binary encoding needed for these to work File will store 32-bit int, not "125" Not human readable, but not really needed Can shrink files; always makes sizes

predictable

Page 23: Edsger Dijkstra

Reading RandomAccessFile

Reading Strings takes a little extra work

String 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

Page 24: Edsger Dijkstra

Writing RandomAccessFile

Also defines methods to write to a file:void writeInt(int i)

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

Page 25: Edsger Dijkstra

RandomAccessFile I/O

Unless specified still read &write sequentiallyRandomAccessFile raf = new …;char c = ‘’;while (c != ‘s’) {

c = (char)raf.readByte();raf.writeByte((byte)c);

}This is an example file we access

Page 26: Edsger Dijkstra

Skipping Around The File

RandomAccessFile allows moving in the file Skip past sections using int skipBytes(int n)

void seek(long pos) moves to position in file

Positions specified as bytes from beginning of file

Page 27: Edsger Dijkstra

RandomAccessFile I/O

Sequential access is no longer requiredRandomAccessFile raf = new …; char c;raf.skipBytes(raf.length()-1);c = (char)raf.readByte();raf.seek(0);raf.writeByte((byte)c);

This is an example file we access

Page 28: Edsger Dijkstra

RandomAccessFile I/O

Sequential access is no longer requiredRandomAccessFile raf = new …; char c;raf.skipBytes(raf.length()-1);c = (char)raf.readByte();raf.seek(0);raf.writeByte((byte)c);

shis is an example file we access

Page 29: Edsger Dijkstra

For Next Lecture

Week #4 assignment available on Angel Continues to be due Wednesday at 5PM Ask me questions, if you have trouble on a

problem

Will be talking about indexed files on Friday What are they and why should Steve be

excited? Why does CS department require you to

learn them? Why does it seem like they are part of

project #1?