Presentation is loading. Please wait.

Presentation is loading. Please wait.

5-Oct-15 Air Force Institute of Technology Electrical and Computer Engineering Object-Oriented Programming Design Topic : Streams and Files Maj Joel Young.

Similar presentations


Presentation on theme: "5-Oct-15 Air Force Institute of Technology Electrical and Computer Engineering Object-Oriented Programming Design Topic : Streams and Files Maj Joel Young."— Presentation transcript:

1 5-Oct-15 Air Force Institute of Technology Electrical and Computer Engineering Object-Oriented Programming Design Topic : Streams and Files Maj Joel Young Joel Young@afit.edu. Maj Joel Young

2 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-152 Object-Oriented Programming Design Java 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) SourceSink programs, user input, etc. files, console, sockets, etc.

3 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-153 Object-Oriented Programming Design I/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 SourceSink Processor

4 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-154 Object-Oriented Programming Design Data Sinks/Sources Several kinds of data streams in Java File Reader Pipe Reader Processor(s) String Reader Char Array Reader Processor(s) File Writer Pipe Writer String Writer Char Array Writer Input Streams (Application is Sink) Output Streams (Application is Source)

5 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-155 Object-Oriented Programming Design The “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 Data OutputStream Data OutputStream double, int, char, String, etc. Buffered OutputStream Buffered OutputStream bytes Hard Disk Hard Disk File OutputStream File OutputStream bytes

6 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-156 Object-Oriented Programming Design The “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 Data InputStream Data InputStream double, int, char, String, etc. Buffered InputStream Buffered InputStream bytes Hard Disk Hard Disk File InputStream File InputStream bytes

7 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-157 Object-Oriented Programming Design File 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(); }

8 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-158 Object-Oriented Programming Design File 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(); }

9 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-159 Object-Oriented Programming Design File 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 BufferedOutputStream(fos); DataOutputStream dos = new DataOutputStream(bos); dos.writeDouble(64.356); 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(); }

10 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-1510 Object-Oriented Programming Design File 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(); }

11 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-1511 Object-Oriented Programming Design ASCII 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(); }

12 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-1512 Object-Oriented Programming Design ASCII Formatted Numbers & Variable Length Strings class Test { static public void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(“test.dat”))); 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(studentNum+”,”+gradeAvg+”,”+name); line = br.readLine(); } 1 4.0 Smith, Joe 2 2.8 Jones, Jim Bob 3 3.9 Doe, Tricia...

13 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-1513 Object-Oriented Programming Design Console 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

14 Air Force Institute of Technology Electrical and Computer Engineering 5-Oct-1514 Object-Oriented Programming Design System.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(“Here’s a string: ”); System.out.println(10); // Integer 10 w/new line break }


Download ppt "5-Oct-15 Air Force Institute of Technology Electrical and Computer Engineering Object-Oriented Programming Design Topic : Streams and Files Maj Joel Young."

Similar presentations


Ads by Google