1 / 14

Object-Oriented Programming Design Topic : Streams and Files

Object-Oriented Programming Design Topic : Streams and Files. Maj Joel Young Joel Young@afit.edu. Maj Joel Young. Java Input/Output. Source. Sink. programs, user input, etc. files, console, sockets, etc. Java implements input/output in terms of streams of characters

efuru
Télécharger la présentation

Object-Oriented Programming Design Topic : Streams and Files

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Java Input/Output Source Sink programs, user input, etc. files, console, sockets, etc. • 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)

  3. I/O Processors Source Sink Processor • 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

  4. Data Sinks/Sources File Reader File Writer Pipe Reader Pipe Writer Processor(s) Processor(s) String Reader String Writer Char Array Reader Char Array Writer Input Streams (Application is Sink) Output Streams (Application is Source) • Several kinds of data streams in Java

  5. The “Pipeline” Concept double, int, char, String, etc. bytes bytes bytes Hard Disk Data OutputStream Buffered OutputStream File OutputStream • 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

  6. The “Pipeline” Concept double, int, char, String, etc. bytes bytes bytes Hard Disk Data InputStream Buffered InputStream File InputStream • 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

  7. 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. 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. 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. 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. 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. 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. 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. 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 } }

More Related