The Java I/O System. Binary I/O streams (ASCII, 8 bits) The decorator design pattern Character I/O streams (Unicode, 16 bits)

Similar documents
Software 1 with Java. Recitation No. 7 (Java IO) May 29,

Software 1. Java I/O

Software 1 with Java. Recitation No. 9 (Java IO) December 10,

7 Streams and files. Overview. Binary data vs text. Binary data vs text. Readers, writers, byte streams. input-output

Java How to Program, 9/e. Copyright by Pearson Education, Inc. All Rights Reserved.

JOSE LUIS JUAREZ VIVEROS com) has a. non-transferable license to use this Student Guide

Software 1. תרגול 9 Java I/O

Exceptions and Working with Files

תוכנה 1 תרגול 8 קלט/פלט רובי בוים ומתי שמרת

Performing input and output operations using a Byte Stream

Software 1 with Java. The java.io package. Streams. Streams. Streams. InputStreams

Chapter 4 Java I/O. X i a n g Z h a n g j a v a c o s q q. c o m

CSC 1214: Object-Oriented Programming

Example: Copying the contents of a file

The I/O Package. THE Java platform includes a number of packages that are concerned with the CHAPTER20

The Java Series IO, Serialization and Persistence. The Java Series. IO, Serialization and Persistence Raul RAMOS / CERN-IT User Support Slide 1

Darshan Institute of Engineering & Technology for Diploma Studies

COMP 213. Advanced Object-oriented Programming. Lecture 19. Input/Output

Chapter 10. IO Streams

Software 1. The java.io package. Streams. Streams. Streams. InputStreams

Object-Oriented Programming Design. Topic : Streams and Files

PIC 20A Streams and I/O

CSD Univ. of Crete Fall Files, Streams, Filters

Writing usable APIs in practice

Il linguaggio Java Programmi d esempio. Gli stream

Pieter van den Hombergh Richard van den Ham. March 13, 2018

Java Input / Output. CSE 413, Autumn 2002 Programming Languages.

Streams. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

CSB541 Network Programming 網路程式設計. Ch.2 Streams 吳俊興國立高雄大學資訊工程學系

Princeton University COS 333: Advanced Programming Techniques A Subset of Java

CS 251 Intermediate Programming Java I/O Streams

Java IO and C++ Streams

I/O in Java I/O streams vs. Reader/Writer. HW#3 due today Reading Assignment: Java tutorial on Basic I/O

System.out.format("The square root of %d is %f.%n", i, r);

Writing usable APIs in practice

Special error return Constructors do not have a return value What if method uses the full range of the return type?

I/O Streams. Object-oriented programming

09-1. CSE 143 Java GREAT IDEAS IN COMPUTER SCIENCE. Overview. Data Representation. Representation of Primitive Java Types. Input and Output.

Algorithms. Produced by. Eamonn de Leastar

Software Development & Education Center. Java Platform, Standard Edition 7 (JSE 7)

How to access your database from the development environment. Marco Ronchetti Università degli Studi di Trento

Introduction to Java

Input, Output and Exceptions. COMS W1007 Introduction to Computer Science. Christopher Conway 24 June 2003

1.00 Lecture 30. Sending information to a Java program

IT101. File Input and Output

Overview CSE 143. Input and Output. Streams. Other Possible Kinds of Stream Converters. Stream after Stream... CSE143 Wi

Object-Oriented Programming in the Java language

Overview CSE 143. Data Representation GREAT IDEAS IN COMPUTER SCIENCE

Overview CSE 143. Data Representation GREAT IDEAS IN COMPUTER SCIENCE. Representation of Primitive Java Types. CSE143 Au

Overview CSE 143. Data Representation GREAT IDEAS IN COMPUTER SCIENCE

Overview CSE 143. Data Representation GREAT IDEAS IN COMPUTER SCIENCE. Representation of Primitive Java Types. CSE143 Sp

Chapter 10 Input Output Streams

pre-emptive non pre-emptive

CS193j, Stanford Handout #26. Files and Streams

Basic I/O - Stream. Java.io (stream based IO) Java.nio(Buffer and channel-based IO)

Objec&ves. Review. Standard Error Streams

输 入输出相关类图. DataInput. DataOutput. java.lang.object. FileInputStream. FilterInputStream. FilterInputStream. FileOutputStream

C17: I/O Streams and File I/O

10.1 Overview 162 CHAPTER 10 CHARACTER STREAMS

Lecture 22. Java Input/Output (I/O) Streams. Dr. Martin O Connor CA166

Chapter 8: Files and Security

Core Java Contents. Duration: 25 Hours (1 Month)

Today. Book-keeping. File I/O. Subscribe to sipb-iap-java-students. Inner classes. Debugging tools

Objec&ves STANDARD ERROR. Standard Error Streams. Ø Byte Streams Ø Text Streams 10/5/16. Oct 5, 2016 Sprenkle - CSCI209 1

Files and Streams

I/O Streams in Java. Produced by: Eamonn de Leastar Dr. Siobhán Drohan

Chapter 17 Binary I/O. Liang, Introduction to Java Programming, Eleventh Edition, (c) 2017 Pearson Education, Inc. All rights reserved.

Programmierpraktikum

Index. CalculatorEngine class, 40, 44 CalculatorFrame class, 48 CalculatorInterface class, 45

File IO. Computer Science and Engineering College of Engineering The Ohio State University. Lecture 20

Object Oriented Design with UML and Java. PART VIII: Java IO

J.73 J.74 THE I/O PACKAGE. Java I/O is defined in terms of streams. Streams are ordered sequences of data that have a source and a destination.

Many Stream Classes. File I/O - Chapter 10. Writing Text Files. Text Files vs Binary Files. Reading Text Files. EOF with hasmoreelements()

ITI Introduction to Computer Science II

JAVA V Input/Output Java, winter semester

JAVA Input/Output Java, winter semester

Dining philosophers (cont)

Java Input/Output. 11 April 2013 OSU CSE 1

1.00 Lecture 31. Streams 2. Reading for next time: Big Java , The 3 Flavors of Streams

DM550 / DM857 Introduction to Programming. Peter Schneider-Kamp

HST 952. Computing for Biomedical Scientists Lecture 8

Basic Java IO Decorator pattern Advanced Java IO. Java IO - part 2 BIU OOP. BIU OOP Java IO - part 2

Week 12. Streams and File I/O. Overview of Streams and File I/O Text File I/O

How to access your database from the development environment. Marco Ronchetti Università degli Studi di Trento

WOSO Source Code (Java)

Input from Files. Buffered Reader

File Operations in Java. File handling in java enables to read data from and write data to files

FILE I/O IN JAVA. Prof. Chris Jermaine

File. Long term storage of large amounts of data Persistent data exists after termination of program Files stored on secondary storage devices

ROEVER ENGINEERING COLLEGE Elambalur,Perambalur DEPARTMENT OF CSE

CN208 Introduction to Computer Programming

Byte and Character Streams. Reading and Writing Console input and output

Active Learning: Streams

Here is a hierarchy of classes to deal with Input and Output streams.

I/O STREAM (REQUIRED IN THE FINAL)

Streams and File I/O

CS 2113 Software Engineering

Any serious Java programmers should use the APIs to develop Java programs Best practices of using APIs

5/29/2006. Announcements. Last Time. Today. Text File I/O Sample Programs. The File Class. Without using FileReader. Reviewed method overloading.

COURSE 10 PROGRAMMING III OOP. JAVA LANGUAGE

Transcription:

The Java I/O System Binary I/O streams (ASCII, 8 bits) InputStream OutputStream The decorator design pattern Character I/O streams (Unicode, 16 bits) Reader Writer Comparing binary I/O to character I/O Files and directories The class File OOP: The Java I/O System 1

Overview of The Java I/O System Goal: To provide an abstraction of all types of I/O Memory File Directory Network Express all configurations Character, binary, buffered, etc. Different kinds of operations Sequential, random access, by line, by word, etc. OOP: The Java I/O System 2

The Stream Concept A stream is a sequential source of information used to transfer information from one source to another. [Source: java.sun.com] OOP: The Java I/O System 3

Streams in Java There is a huge (and complicated) hierarchy of stream classes in Java. Overview classes of the stream hierarchy InputStream (input + binary) OutputStream (output + binary) Reader (input + Unicode) Writer (output + Unicode) All abstract classes. OOP: The Java I/O System 4

The Decorator Design Pattern Wrapper classes in decorators to add functionality. Component operation() ConcreteComponent operation() Decorator operation() component component.operation() ConcreteDecorator1 addstate operation() ConcreteDecorator2 operation() addoperation() OOP: The Java I/O System 5

The Decorator Design Pattern, cont Hello -->Hello<-- ----- Hello OOP: The Java I/O System 6

The Decorator Design Pattern, cont public abstract class BeautifulString { // encapsulated nice string protected String text; // The abstract methods that get a beautiful string public abstract String get(); } public abstract class StringDecorator extends BeautifulString { /** The component that is decorated */ protected BeautifulString component; } public class CenterStringDecorator extends StringDecorator { public CenterString(BeautifulString comp){ component = comp; } // the decorator method public String get(){ String temp = component.get(); temp = "-->" + temp + "<--"; return temp; } } OOP: The Java I/O System 7

The Decorator Design Pattern, cont public static void main(string[] args) { System.out.println("Concrete"); BeautifulString bs1 = new ConcreteString("Hello"); System.out.println(bs1.get()); System.out.println("Center + Concrete"); BeautifulString bs2 = new CenterStringDecorator( new ConcreteString("Hello")); System.out.println(bs2.get()); System.out.println("Top + Center + Concrete"); BeautifulString bs3 = new TopStringDecorator( new CenterStringDecorator( new ConcreteString("Hello"))); System.out.println(bs3.get()); OOP: The Java I/O System 8

Two issues with I/O Decorator Pattern and Java I/O What are you talking to (n). The way you are talking to it (m). Solution no. 1 Make a class for every combination n * m classes, not flexible, hard to extend Solutions no. 2 Java filter streams (decorators) are added dynamically to create the functionality needed. n + m classes Input decorator: FilterInputStream Output decorator: FilterOutputStream OOP: The Java I/O System 9

InputStream Hierarchy InputStream, the abstract component root in decorator pattern FileInputStream, etc. the concrete components FilterInputStream, the abstract decorator LineNumberInputStream, DataInputStream, etc. concrete decorators OOP: The Java I/O System 10

OutputStream Hierarchy OutputStream, the abstract component root in decorator pattern FileOutputStream, etc. the concrete components FilterOutputStream, the abstract decorator PrintStream, DataOutputStream, etc. concrete decorators OOP: The Java I/O System 11

InputStream Types Type of InputStream ByteArrayInputStream StringBufferInputStream PipedInputStream FileInputStream SequencedInputStream ObjectInputStream Reads From Block of memory String (note not StringBuffer) Pipe (in another thread) File Combines InputStreams Objects from an InputStream Concrete Components OOP: The Java I/O System 12

OutputStream Types Type of OutputStream ByteArrayOutputStream PipedOutputStream FileOutputStream ObjectOutputStream Writes To Block of memory Pipe (in another thread) File Objects to a OutputStream Concrete Components OOP: The Java I/O System 13

DataInputStream FilterInputStream Full interface for reading built-in types For portable reading of data between different OS platforms BufferedInputStream Adds buffering to the stream (do this by default) LineNumberInputStream Only adds line numbers PushbackInputStream One-character push pack for scanners (lexers) Concrete Decorators OOP: The Java I/O System 14

DataOutputStream FilterOutputStream Full interface for writing built-in types For portable writing of data between different OS platforms Example: System.out.println PrintStream Allows primitive formatting of data for display Not for storage use DataOutputStream for this BufferedOutputStream Adds buffering to output (do this by default!) Concrete Decorators OOP: The Java I/O System 15

OutputStream, Example import java.io.*; // [Source: java.sun.com] public class DataIODemo { public static void main(string[] args) throws IOException { // where to write to DataOutputStream out = new DataOutputStream( new FileOutputStream("invoice1.txt")); // alternative also using a buffer decorator DataOutputStream out = new DataOutputStream( new BufferedOutputStream( new FileOutputStream("invoice1.txt"))); OOP: The Java I/O System 16

OutputStream, Example, cont. import java.io.*; // [Source: java.sun.com] public class DataIODemo { public static void main(string[] args) throws IOException { //snip double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 }; int[] units = { 12, 8, 13, 29, 50 }; String[] descs = { "Java T-shirt", "Java Mug", "Duke Juggling Dolls", "Java Pin", "Java Key Chain" }; for (int i = 0; i < prices.length; i ++) { out.writedouble(prices[i]); out.writechar('\t'); // add a tab out.writeint(units[i]); out.writechar('\t'); // add a tab out.writechars(descs[i]); out.writechar('\n'); // add a newline } out.close(); OOP: The Java I/O System 17

InputStream, Example // read it in again DataInputStream in = new DataInputStream( new FileInputStream("invoice1.txt")); // alternative also using a buffer decorator DataInputStream in = new DataInputStream( new BufferedInputStream ( new FileInputStream("invoice1.txt"))); double price; int unit; StringBuffer desc; double total = 0.0; OOP: The Java I/O System 18

InputStream, Example, cont. try { while (true) { price = in.readdouble(); in.readchar(); // throws out the tab unit = in.readint(); in.readchar(); // throws out the tab char chr; desc = new StringBuffer(20); char linesep = System.getProperty("line.separator").charAt(0); while ((chr = in.readchar())!= linesep) desc.append(chr); System.out.println("You've ordered " + unit + " units of " + desc + " at $" + price); total = total + unit * price; } } catch (EOFException e) { } System.out.println("For a TOTAL of: $" + total); in.close(); }// end main OOP: The Java I/O System 19

Reader and Writer Classes Added in Java 1.1 Not meant to replace InputStream and OutputStream Internationalization Unicode support Designed to solved efficiency problems Structured in class hierarchies similar to the InputStream and OutputStream hierarchies Uses the decorator design pattern OOP: The Java I/O System 20

Reader Class Hierarchy Reader, the abstract component root in decorator pattern BufferedReader, etc. the concrete components FilterReader, the abstract decorator PushbackReader, concrete decorators OOP: The Java I/O System 21

Writer Class Hierarchy Writer, the abstract component root in decorator pattern BufferedWriter, etc. the concrete components FilterWriter, the abstract decorator No concrete decorators OOP: The Java I/O System 22

Reader and Writer Types Transport to and from main memory CharArrayReader, CharArrayWriter StringReader, StringWriter Transport to and from pipelines (networking) PipedReader, PipedWriter Transport to and from files FileReader, FileWriter DataOutputStream unaltered from Java 1.0 to 1.1 OOP: The Java I/O System 23

InputStreamReader Character Based Streams Reads platform characters and delivers Unicode characters to the Java program. OutputStreamWriter Writes Unicode characters to platform dependent characters. PrintWriter Writes Java primitive data types to file. OOP: The Java I/O System 24

FileReader and FileWriter, Example import java.io.*; public class Copy { public static void main(string[] args) throws IOException { FileReader in = new FileReader(new File(args[0])); FileWriter out = new FileWriter(new File(args[1])); int c; do{ c = in.read(); if(c!= -1) { out.write(c); } } while (c!= -1); } } in.close(); out.close(); OOP: The Java I/O System 25

Binary vs. Character Based I/O Overview InputStream OutputStream FileInputStream FileOutputStream StringBufferedInputStream N/A ByteArrayInputStream ByteArrayOutputStream PipedInputStream PipedOutputStream Reader convert: InputStreamReader Writer convert: OutputStreamWriter FileReader FileWriter StringReader (better name) StringWriter CharArrayReader CharArrayWriter PipedReader PipedWriter OOP: The Java I/O System 26

Binary vs. Character Filter Overview FilterInputStream FilterOutputStream BufferedInputStream BufferedOutputStream DataInputStream PrintStream LineNumberInputStream PushbackInputStream FilterReader FilterWriter (abstract class) BufferedReader (has a readline()) BufferedWriter Use DataInputStream or BufferedReader PrintWriter LineNumberReader PushbackReader OOP: The Java I/O System 27

Representing the File System File systems varies between operating system, i.e., Path separators Permissions in Unix Directories on the Mac Drive letters on Windows Needs an abstraction to hide the differences To make Java program platform independent. OOP: The Java I/O System 28

The File Class Refers to one or more file names, i.e., not a handle to a file Composite design pattern To get an array of file names. Call the list() method. OOP: The Java I/O System 29

The Composite Design Pattern, Again Component operation() add() remove() getchild() Leaf operation() Composite operation() add() remove() getchild() children for all c in children c.operation(); OOP: The Java I/O System 30

The File Class, Example import java.io.*; public class DirectoryList { public static void main(string[] args) throws IOException{ File dir = new File(args[0]); } } if(dir.isdirectory() == false) { if (dir.exists() == false) System.out.println("There is no such dir!"); else System.out.println("That file is not a dir."); } else { String[] files = dir.list(); System.out.println ("Files in dir \"" + dir + "\":"); for (int i = 0; i < files.length; i++) System.out.println(" " + files[i]); } OOP: The Java I/O System 31

Summary Streams a large class hierarchy for input and output. The decorator pattern is the key to understanding it The decorator design pattern may seem strange Very flexible, but requires extra coding in clients. Scanner class for input/output very versatile For objects to live between program invocations use the Serializable interface. Covered later in course. java.nio packages goal speed Look at it if you needed it in your projects OOP: The Java I/O System 32