Title: Air Force Institute of Technology
1Object-Oriented Programming DesignTopic
Streams and Files
- Maj Joel Young
- Joel Young_at_afit.edu.
Maj Joel Young
2Java Input/Output
- Java implements input/output in terms of streams
of characters - Streams have a producer, or source
- Streams have a consumer, or sink
- Sometimes sources are sinks depending on use(a
file can be both a source and a sink)
3I/O Processors
- Control over the stream is improved by adding
processors - Convert char streams to integers, doubles,
strings, etc. - Perform filtering
- Buffer characters to improve read performance
4Data Sinks/Sources
- Several kinds of data streams in Java
5The Pipeline Concept
- Writing Data Start with a sink, such as a
FileOutputStream - Writes only one byte at a time (or an array of
bytes), not very efficient so we add a buffer
manager - Can still only write a byte (or array of bytes),
so we add a DataOutputStream to allow more
complex types
6The Pipeline Concept
- Reading Data Start with a source, such as a
FileInputStream - Reads only one byte at a time (or an array of
bytes), not very efficient so we add a buffer
manager - Can still only read a byte (or array of bytes),
so we add a DataInputStream to allow more complex
types
7File Streams
- File Streams (Byte Stream Classes)
- FileInputStream read bytes/arrays of bytes
- FileOutputStream write bytes/arrays of bytes
import java.io. public class Copy public
static void main(String args) throws
IOException FileInputStream in
new FileInputStream(source.dat)
FileOutputStream out new FileOutputStream(dest.
dat) int c while ((c in.read())
! -1) out.write(c) in.close()
out.close()
8File Streams
- Add DataInputStream/DataOutputStream
- Provides read/write methods for primitives
- Provides read/write methods for unicode strings
import java.io. public class Test public
static void main(String args) throws
IOException FileOutputStream fos
new FileOutputStream(output.dat)
DataOutputStream dos new DataOutputStream(fos)
dos.writeDouble(64.356)
dos.close() FileInputStream fis new
FileInputStream(output.dat)
DataInputStream dis new DataInputStream(fis)
double test dis.readDouble()
System.out.println( test ) dis.close()
9File Streams
- Can keep adding processors ...
- Add buffered input/output
import java.io. public class Test2 public
static void main(String args) throws
IOException FileOutputStream fos
new FileOutputStream(output.dat)
BufferedOutputStream bos new BufferedOutputStrea
m(fos) DataOutputStream dos new
DataOutputStream(bos) dos.writeDouble(64.35
6) dos.close() FileInputStream fis
new FileInputStream(output.dat)
BufferedInputStream bis new BufferedInputStream(
fis) DataInputStream dis new
DataInputStream(bis) double test
dis.readDouble() System.out.println( test
) dis.close()
10File Streams
- File Streams (Character Stream Classes)
- FileReader read chars/arrays of chars
- FileWriter write chars/arrays of chars
import java.io. public class Copy2 public
static void main(String args) throws
IOException FileReader in new
FileReader(source.dat) FileWriter out
new FileWriter(dest.dat) int c
while ((c in.read()) ! -1)
out.write(c) in.close()
out.close()
11ASCII Files
- Problem ASCII uses 8-bit chars, but Java uses
16-bit Unicode chars how do we read plain-text
files? - InputStreamReader Translates input bytes to
Unicode
public class Copy public static void
main(String args) throws IOException
FileInputStream in new FileInputStream(source.
dat) InputStreamReader isr new
InputStreamReader(in) BufferedReader br
new BufferedReader(isr) String line
br.readLine() // Read a line of text
while (line ! null) // Any more text to read?
System.out.println(line) //
Print the text to the console line
br.readLine() // Read more text
br.close()
12ASCII Formatted Numbers Variable Length Strings
class Test static public void main(String
args) throws IOException BufferedReader
br new BufferedReader(new InputStreamReader(
new FileInputStream(test.d
at))) String line br.readLine() // Get
first line of text StringTokenizer st
int studentNum double gradeAvg String
name while (line ! null) st
new StringTokenizer(line) studentNum
Integer.parseInt(st.nextToken()) gradeAvg
Double.parseDouble(st.nextToken()) name
st.nextToken() while (st.hasMoreTokens())
name name
st.nextToken() System.out.println(s
tudentNum,gradeAvg,name) line
br.readLine()
1 4.0 Smith, Joe 2 2.8 Jones, Jim Bob 3 3.9 Doe,
Tricia . . .
13Console I/O
- PrintStream
- Heavily overloaded versions of print() for
- print(int n)
- print(double d)
- print(float f)
- print(String s)
-
- Version called println() puts a newline
character after the formatted text
14System.in System.out
- Like C keeps stdin and stdout streams open
at all times - System.in is a class attribute of type
InputStream - System.out is a class attribute of type
PrintStream
import java.io. public class Test public
static void main(String args) throws
IOException System.out.print(Heres
a string ) System.out.println(10) //
Integer 10 w/new line break