Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

29
Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs

Transcript of Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Page 1: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Introduction to Java 2 Programming

Lecture 7

IO, Files, and URLs

Page 2: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Overview

• Java I/O– The java.io package– Streams, Readers and Writers

• Files– Working with Files

• URLs– Working with Internet Resources

Page 3: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – The Basics

• Java I/O is based around the concept of a stream– Ordered sequence of information (bytes) coming from a

source, or going to a ‘sink’

– Simplest stream reads/writes only a single byte, or an array of bytes at a time

• Designed to be platform-independent • The stream concept is very generic

– Can be applied to many different types of I/O

– Files, Network, Memory, Processes, etc

Page 4: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – The Basics

• The java.io package contains all of the I/O classes.– Many classes specialised for particular kinds of stream

operations, e.g. file I/O

• Reading/writing single bytes is quite limited– So, it includes classes which provide extra functionality– e.g. buffering, reading numbers and Strings (not bytes),

etc.

• Results in large inheritance hierarchy, with separate trees for input and output stream classes

Page 5: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O -- InputStream

Page 6: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – InputStreams

Page 7: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – Using InputStreams

• Basic pattern for I/O programming is as follows:

Open a stream

While there’s data to read

Process the data

Close the stream

Page 8: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – Using InputStreams

• I/O in Java:InputStream in = new FileInputStream(“c:\\temp\\

myfile.txt”);

int b = in.read();

//EOF is signalled by read() returning -1

while (b != -1)

{

//do something…

b = in.read();

}

in.close();

Page 9: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – Using InputStreams

• But using buffering is more efficient, therefore we always nest our streams…

InputStream inner = new FileInputStream(“c:\\temp\\myfile.txt”);

InputStream in = new BufferedInputStream(inner);int b = in.read();//EOF is signalled by read() returning -1while (b != -1){ //do something… b = in.read();}in.close();

Page 10: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – Using InputStreams

• We’ve omitted exception handling in the previous examples

• Almost all methods on the I/O classes (including constructors) can throw an IOException or a subclass.

• Always wrap I/O code in try…catch blocks to handle errors.

Page 11: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – Using InputStreams

InputStream in = null;try{ InputStream inner = new FileInputStream(“c:\\temp\\

myfile.txt”); in = new BufferedInputStream(inner); //process file} catch (IOException e){ e.printStackTrace();}finally{ try { in.close(); } catch (Exception e) {}}

Page 12: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – OutputStream

Page 13: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – OutputStreams

Page 14: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – Using InputStreams

• Basic pattern for output is as follows:

Open a stream

While there’s data to write

Write the data

Close the stream

Page 15: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – Using OutputStreams

• Output in Java:OutputStream out = new FileOutputStream(“c:\\temp\\

myfile.txt”);

while (…)

{

out.write(…);

}

out.close();

Page 16: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – Using OutputStreams

OutputStream out = null;try{ OutputStream inner = new FileOutputStream(“c:\\temp\\

myfile.txt”); out = new BufferedOutputStream(inner); //write data to the file} catch (IOException e){ e.printStackTrace();}finally{ try { out.close(); } catch (Exception e) {}}

Page 17: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

But That’s Not All!

• Input/OutputStream and sub-classes were part of Java 1.1.

• Java 1.2 adds more classes specialised for character based I/O– The stream classes are for data I/O.

• Classes for character I/O are called Readers and Writers

• Why have specialised classes?– To support foreign languages

Page 18: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Unicode

• Each character in the ASCII character set fits into a single byte– …but that’s not enough for chinese, and other complex

alphabets– Need more than a single byte– A Java character (char) is 2 bytes

• Java handles text using Unicode– International standard character set, containing characters

for almost all known languages– And a few imaginary ones! (Klingon, Elvish…)

• Inside the JVM all text is held as Unicode

Page 19: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java Text I/O

• Because byte != character for all languages, you have to turn bytes into chars using a Input/OutputStream

• Java provides Readers and Writers to save you this work.

• These classes deal with streams of characters– Read/write single character or array of characters

– Again there are classes specialised for particular purposes

Page 20: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – Reader

Page 21: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – Readers

Page 22: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Using Readers

Reader in = null;try{ Reader inner = new FileReader(“c:\\temp\\myfile.txt”); in = new BufferedReader(inner); //process file} catch (IOException e){ e.printStackTrace();}finally{ try { in.close(); } catch (Exception e) {}}

Page 23: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – Writer

Page 24: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Java I/O – Writers

Page 25: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Using Writers

Writer out = null;try{ Writer inner = new FileWriter(“c:\\temp\\myfile.txt”); out = new BufferedWriter(inner); //write data to the file} catch (IOException e){ e.printStackTrace();}finally{ try { out.close(); } catch (Exception e) {}}

Page 26: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

Bridging the Gap

• Sometimes you need to bridge across the two hierachies– Use InputStreamReader or OutputStreamWriter

• InputStreamReader– Reads bytes from an InputStream, and turns them into

characters using a character encoding

• OutputStreamWriter– Turns characters sent to the Writer into bytes written by

the OutputStream, again using a character encoding.

Page 27: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

The File Object

• Java provides access to the file system through the java.io.File object– Represents files and directories

• Has methods for working with files and directories– Making directories, listing directory contents– renaming and deleting, checking permissions, etc

• Check whether the File corresponds to a directory or a file with isDirectory()

• Well-featured, and intuitive– Take a look through the javadocs

• Quick example…

Page 28: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

The URL Object

• Similar to File is the java.net.URL class– Provides access to information about website addresses

• Most useful is a means to open an InputStream to a remote website– Use the openStream() method

• Makes it very simple to retrieve files from the Internet.

• Throws MalformedURLException if you provide an illegal internet address in its constructor

• Example…

Page 29: Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.

URL Object Example

try{URL p = new

URL(“http://www.ldodds.com/lectures/person.jar”);InputStream inner = p.openStream();BufferedInputStream in = new

BufferedInputStream(inner);//process the file…in.close()catch (Exception e){ e.printStackTrace();}