Java IO: System - Out (Output Stream) System - in (Input Stream) System - Err (Error Stream)
Java IO: System - Out (Output Stream) System - in (Input Stream) System - Err (Error Stream)
Provides methods for accessing file, text data,object serialization and internationalization Sequential and Random access Reading and writing of primitive values Applications and applets are provided with three streams automatically
1. 2. 3.
Streams
Java uses streams to process file data, A sequence of data that has no defined ending. Flowing data
Java.io
Bytes Chars
All applications using input and output functionality need to import java.io. Supports random and sequential access to data
Processing Streams
While loop End-of-File or some special character Windows Control-Z (EOF) Unix Control-D (EOF) Data comes fast and slow
Character Streams
Two flavors
Reader Writer
Reader and Writer are abstract classes Most programs should use readers and writers to read and write textualinformation
Byte Streams
To read and write, programs should use the byte streams, descendants of InputStream and OutputStream These streams are typically used to read and write binary data such as images and sounds
More on Streams
System.out is an OutputStream; specifically it's a PrintStream. There's a corresponding System.in which is an InputStream used to read data from the console. Data for streams can also come from files. Later you'll see how to use the File class and the FileInputStream and FileOutputStream classes to read and write data from files. Streams can also be used to access data from an ftp server or a web server
Echo Example
Most io methods throw IOException IOExceptions occur if the disk or file cannot be opened or read.
File Processing
FileInputStream for byte-based input from a file FileOutputStream for byte-based output to a file FileReader for character-based input from a file FileWriter for character-based output to a file
Buffering
Buffering
Improves performance of I/O Copies each output to a region of memory called a buffer Entire buffer output to disk at once
One long disk access takes less time than many smaller ones
Reading
The basic read() method reads a byte at a time. This is less than perfectly efficient. The following two overloaded variants read multiple bytes into an array of bytes. public int read(byte[] data) throws IOException public int read(byte[] data, int offset, int length) throws IOException
The first method tries to read enough bytes to fill the array b. The second method reads length bytes from the input stream and stores them into the array b starting at position offset These methods then return the number of bytes actually read. You should not assume that the array will be filled or that length bytes will actually have been read. If the end of stream is encountered, -1 is returned
Writing
abstract void close() Close the stream, flushing it abstract void flush() Flush the stream. voidwrite(char[] cbuf ) Write an array of characters. abstract void write(char[] cbuf, int off, int len) Write a portion of an array of characters. void write(int c) Write a single character. voidwrite(String str) Write a string. voidwrite(String str, int off, int len) Write a portion of a string.
java.io.File
This is the main class used for file and directory manipulation in a platform independent way. User interfaces and operating systems use system-dependent pathname strings to name files and directories. This class presents an abstract, system-independent view of hierarchical pathnames.
Uses FileInputStream Gets filename from the command-line Retrieves the size of the file and the data You create a new FileInputStream object by passing the name of the file to the constructor, like this:
public void write(byte[] data, int offset, int length) throws IOException
b - the data. off - the start offset in the data. len - the number of bytes to write
If the file exists in the current directory, it will be overwritten by the new data. If the file doesn't exist it will be created in the current directory. You create a new FileOutputStreamobject by passing the name of the file to the constructor, like this:
Appending data
It's often useful to be able to append data to an existing file rather than overwriting it. To do this just pass the boolean value true as the second argument to the FileOutputStream() constructor. For example
FileOutputStream fos = new FileOutputStream("16.html", true);
These classes buffer reads and writes by reading data first into a buffer (an internal array of bytes). Thus an application can read bytes from the stream without necessarily calling the underlyingnative method. The data is read from or written into the buffer in blocks; subsequent accesses go straight to the buffer. More efficient way of handling data reads and writes
public BufferedInputStream(InputStream in) public BufferedInputStream(InputStream in, int size) public BufferedOutputStream(OutputStream out) public BufferedOutputStream(OutputStream out, int size)
File Class
java.io.File Main class for manipulating files and directories System Independent fashion
Path names are specific to a particular Operating System n Ex. C:\projects\myfile.txt windows /home/projects/myfile.txt unix
A File object is not a file handle. Just because you have a File object does not mean that the equivalent file actually exists on the disk. There are methods you can use to determine whether a File object refers to a real file or not (specifically exists()).
File Example
File Info Uses methods from the File class to retrieve information about a particular file.
Reading Files
The FileReader class reads text files using the platform's default character encoding and the buffer size. If you need to change these values, construct an InputStreamReader on a FileInputStream instead.
public FileReader(String fileName) throws FileNotFoundException public FileReader(File file) throws FileNotFoundException public FileReader(FileDescriptor fd)
Only the constructors are declared in this class. For example, FileReader fr = new FileReader("36.html");
The java.io.FileWriter class writes text files using the platform's default character encoding and the buffer size. If you need to change these values, construct an OutputStreamReader on a FileOutputStream instead.
public FileWriter(String fileName) throws IOException public FileWriter(String fileName, boolean append) throws IOException public FileWriter(File file) throws IOException public FileWriter(FileDescriptor fd) Only the constructors are declared in this class. For example, FileWriter fw = new FileWriter("36.html");
The java.io.LineNumberReader class is a subclass of java.io.BufferedReader that keeps track of which line you're currently reading. It has all the methods of BufferedReader including readLine(). It also has two constructors, getLineNumber(), and setLineNumber() methods: public LineNumberReader(Reader in) public LineNumberReader(Reader in, int size) public void setLineNumber(int lineNumber) public int getLineNumber() The setLineNumber() method does not change the file pointer. It just changes the value getLineNumber() returns. For example, it would allow you to start counting from -5 if you knew there were six lines of header data you didn't want to count.