Download Java I/O: Understanding Streams, Reading and Writing Files in Java and more Slides Java Programming in PDF only on Docsity!
Simple Java I/O
Part I General Principles
Streams
- All modern I/O is stream-based
- A stream is a connection to a source of data or to a destination for data (sometimes both)
- An input stream may be associated with the keyboard
- An input stream or an output stream may be associated with a file
- Different streams have different characteristics:
- A file has a definite length, and therefore an end
- Keyboard input has no specific end
Why Java I/O is hard
- Java I/O is very powerful, with an overwhelming number of options
- Any given kind of I/O is not particularly difficult
- The trick is to find your way through the maze of possibilities
open use close
Opening a stream
- There is data external to your program that you want to get, or you want to put data somewhere outside your program
- When you open a stream, you are making a connection to that external place
- Once the connection is made, you forget about the external place and just use the stream
open use close
Using a stream
- Some streams can be used only for input, others only for output, still others for both
- Using a stream means doing input from it or output to it
- But it’s not usually that simple--you need to manipulate the data in some way as it comes in or goes out
open use close
Example of using a stream
int ch; ch = fileReader.read( );
- The fileReader.read() method reads one character and returns it as an integer, or - if there are no more characters to read
- The meaning of the integer depends on the file encoding (ASCII, Unicode, other)
open use close
Reading lines
String s; s = bufferedReader.readLine( );
- A BufferedReader will return null if there is nothing more to read
open use close
Closing
- A stream is an expensive resource
- There is a limit on the number of streams that you can have open at one time
- You should not have more than one stream open on the same file
- You must close a stream before you can open it again
- Always close your streams!
open use close
Text files
- Text (.txt) files are the simplest kind of files
- text files can be used by many different programs
- Formatted text files (such as .doc files) also contain binary formatting information
- Only programs that “know the secret code” can make sense formatted text files
- Compilers, in general, work only with text
My LineReader class
class LineReader { BufferedReader bufferedReader;
LineReader(String fileName) {...}
String readLine( ) {...}
void close( ) {...} }
The full LineReader constructor
LineReader(String fileName) { FileReader fileReader = null; try { fileReader = new FileReader(fileName); } catch (FileNotFoundException e) { System.err.println ("LineReader can't find input file: " + fileName); e.printStackTrace( ); } bufferedReader = new BufferedReader(fileReader); }
readLine
String readLine( ) { try { return bufferedReader.readLine( ); } catch(IOException e) { e.printStackTrace( ); } return null; }
How did I figure that out?
- I wanted to read lines from a file
- I found a readLine method in the BufferedReader class
- The constructor for BufferedReader takes a Reader as an argument
- An InputStreamReader is a kind of Reader
- A FileReader is a kind of InputStreamReader
The LineWriter class
class LineWriter { PrintWriter printWriter;
LineWriter(String fileName) {...}
void writeLine(String line) {...}
void close( ) {...} }