Presentation is loading. Please wait.

Presentation is loading. Please wait.

Streams and File I/O Chapter 9 Chapter 9.

Similar presentations


Presentation on theme: "Streams and File I/O Chapter 9 Chapter 9."— Presentation transcript:

1 Streams and File I/O Chapter 9 Chapter 9

2 The Concept of a Stream Files can be used to store Java classes
Java programs output from a program input for a program. File I/O as well as keyboard and screen I/O are handled by streams. Chapter 9

3 The Concept of a Stream, cont.
A stream is a flow of data (characters, numbers, etc.). Data flowing into a program is called an input stream. Data flowing out of a program is called an output stream. Chapter 9

4 The Concept of a Stream, cont.
A stream is implemented as an object. It delivers data to a destination such as a file or a stream or it takes data from a source such as a file or the keyboard, and delivers it to a program. System.out is the only output stream we have used so far. Objects of class Scanner, used for keyboard input, are streams, too. Chapter 9

5 The Concept of a Stream, cont.
This chapter discusses streams that connect programs to files. Chapter 9

6 Why Use Files for I/O? Keyboard input and screen output deal only with temporary data, which is lost when the program ends. Files permit data to be stored permanently (or at least until a program changes the file). Input files can be used over and over by different programs. Files also provide convenient storage and retrieval of large quantities of data. Chapter 9

7 Text Files and Binary Files
All data in a file is stored as binary digits. Files with contents that must be treated as sequences of binary digits are called binary files; binary files can be read only by machines. Chapter 9

8 Text Files and Binary Files,
cont. Sometimes, it is more convenient to think of a file’s contents as a sequence of characters. Files with streams and methods to make them look like sequences of characters are called text files; text files can be read by people. Chapter 9

9 Text Files and Binary Files, cont.
However, binary files are more efficient to process than text files. In Java, binary files are platform- independent. Binary files can be created by one computer and read by another, combining portability and efficiency. Chapter 9

10 Text Files and Binary Files, cont.
Though text files can be read and written using an editor, binary files must be read and written by a program. Chapter 9

11 Text-File Output with PrintWriter
Class PrintWriter has a method println that behaves like System.out.println The java.io package contains the class PrintWriter and the other file I/O classes discussed in this chapter. Chapter 9

12 Text-File Output with PrintWriter, cont.
class TextFileOutputDemo Chapter 9

13 Text-File Output with PrintWriter, cont.
A file is opened using something similar to outputStream = new PrintWriter( new FileOutputStream(“out.txt”)); An empty file is connected to a stream. If the named file (out.txt, for example) exists already, its old contents are lost. If the named file does not exist, a new empty file is created (and named out.txt, for example). Chapter 9

14 Text-File Output with PrintWriter, cont.
Class Printwriter has no constructor that takes a file name as an argument. So, we use class FileOutputStream to create a stream and can be used as an argument to a PrintWriter constructor. Syntax PrintWriter Output_Stream_Name = new PrintWriter (new FileOutputStream(File_Name)); Chapter 9

15 Text-File Output with PrintWriter, cont.
The FileOutputStream constructor, and thus the PrintWriter constructor invocation can throw a FileNotFoundException, which means that the file could not be created. The PrintWriter object is declared outside the try block. If it were declared inside the try block, it would be local to the try block. Chapter 9

16 Some Methods in Class PrintWriter
constructor PrintWriter(OutputStream streamObject) to create a new file new PrintWriter(new FileOutputStream(File_Name)) to append new text to an old file FileOutputStream(File_Name, true)) Chapter 9

17 Some Methods in Class PrintWriter, cont.
to output to the file connected to the stream public final void println(Almost_Anything) print(Almost_Anything) To close a stream’s connection to a file public void close() To flush the output stream public void flush() Chapter 9

18 Closing Text Files When a program finishes writing to or reading from a file, it should close the file. examples outputStream.close(); inputStream.close(); If a program does not close a file before the program ends, Java will will close it when the program ends, provided the program ends normally. Chapter 9

19 Closing Text Files, cont.
The sooner a file is closed, the less likely it is to be damaged by being left open when a program ends abnormally. If a program writes a file, it must close the file before it attempts to read from it. Chapter 9

20 Use toString for Text-File Output
Classes typically include a method toString. The methods println and print in class PrintWriter behave like System.out.println and System.out.print, respectively. Chapter 9

21 Use toString for Text-File Output, cont.
class Species Chapter 9

22 Use toString for Text-File Output, cont.
class TextFileObjectOutputDemo Chapter 9

23 Text-file Input with BufferedReader
Class BufferedReader is the preferred stream class for reading from a text file. Class BufferedReader has no constructor that takes a filename as its argument. Class FileReader accepts a file name as a constructor argument and produces a stream that is a Reader object. The constructor for class BufferedReader accepts a Reader object as an argument. Chapter 9

24 Text-file Input with BufferedReader, cont.
syntax BufferedReader Stream_Name = new BufferedReader(new FileReader(File_Name)); Methods readln and read are used to read from the file. The FileReader constructor, and thus the BufferedReader constructor invocation can throw a FileNotFoundException. Chapter 9

25 Text-file Input with BufferedReader, cont.
class TextFileInputDemo Chapter 9

26 Some Methods in Class BufferedReader
constructor BufferedReader(Reader, readerObject) to create a stream new BufferedReader(new FileReader(File_Name)) to read a line of input from the file public String readLine() throws IOException If the read operation goes beyond the end of the file, null is returned. Chapter 9

27 Some Methods in Class BufferedReader, cont.
to read a single character from the file and return it as an int value public int read() throws IOException If the read operation goes beyond the end of the file, -1 is returned. to read a single character from the file and to treat it as a character char next = (char)(inputStream.read()); Chapter 9

28 Some Methods in Class BufferedReader, cont.
To read a number from a text file, the number must be read in as a string and the string must be converted to a number. to close a stream’s connection to a file public void close() Chapter 9

29 Java Tip: Using Path Names
When providing a file name as an argument for opening a file, a simple file name may be used if the file is in the same directory as the program being run. A full or relative path name also can be used. A full path name is the complete path name, starting from the root directory. Chapter 9

30 Java Tip: Using Path Names, cont.
A relative path name is the path name starting from the directory containing the program. The way to specify path names depends upon the operating system. Chapter 9

31 The StringTokenizer Class
Class BufferedReader can read entire lines or single characters, but not single words. Class StringTokenizer can take an entire line of text and break it into individual words. The class StringTokenizer is in the java.util package. Individual words are called tokens. Chapter 9

32 The StringTokenizer Class, cont.
Tokens are nonwhitespace characters. example StringTokenizer tokenizer = new StringTokenizer(“Read my lips!”) while (tokenizer.hasMoreTokens()) { System.out.println (tokenizer.nextToken()); } Chapter 9

33 The StringTokenizer Class, cont.
This will produce Read my lips! Chapter 9

34 The StringTokenizer Class, cont.
Separators are whitespace characters unless otherwise specified. To specify a set of separators, a string consisting of all the separator characters is given as a second argument to the constructor. example … new StringTokenizer(“Read my lips!”, “\n.,!”); Chapter 9

35 Some Methods in Class StringTokenizer
constructors public StringTokenizer(String theString) theString, String delimiters) more tokens? public boolean hasMoreTokens() next token public String nextToken() Chapter 9

36 Some Methods in Class StringTokenizer, cont.
remaining tokens public int countTokens() Chapter 9

37 Java Tip: Testing for the End of a Text File
When method readLine in class BufferedReader attempts to read beyond the end of a file, the method returns the value null. When method read attempts to read beyond the end of a file, the method returns the value -1. Chapter 9

38 Java Tip: Testing for the End of a Text File
class EOFDemo Chapter 9

39 The Classes FileReader and FileOutputStream
Class FileReader is used with class BufferedReader; class FileOutputStream is used with class Printwriter. Class FileReader and class FileOutputStream accept a file name as a constructor argument. Chapter 9

40 The Classes FileReader and FileOutputStream, cont.
Connecting a BufferedReader object to a file using a string name requires two steps. First, create an object of the class FileReader. Then use this object to create an object of class BufferedReader. Chapter 9

41 The Classes FileReader and FileOutputStream, cont.
example BufferedReader inputStream = new BufferedReader (new FileReader(“story.txt”); Chapter 9

42 The Classes FileReader and FileOutputStream, cont.
Producing a PrintWriter output stream from a file using FileOutputStream requires two steps. First, create an object of the class FileOutputStream. Then use this object to create an object of class PrintWriter. Chapter 9

43 The Classes FileReader and FileOutputStream, cont.
example PrintWriter OutputStream = new PrintWriter (new FileOutputStream (“stuff.txt”); Chapter 9

44 Using the File Class The methods of the class File can check the properties of files. Does the named file exist? Is the file readable? Typically, the operating systems lets you designate files as not readable or as readable only by certain users. Chapter 9

45 Using the File Class, cont.
The File class is like a wrapper class for strings which are file names. example new File(“treasure.txt”) Chapter 9

46 Using the File Class, cont.
class FileClassDemo Chapter 9

47 Using the File Class, cont.
Method canWrite determines if the operating system will let you write to the file. Typically, the operating systems lets you designate files as not writeable or as writeable only by certain users. Chapter 9

48 Some Methods in the Class File
public boolean exists() public boolean canRead() public boolean canWrite() public boolean delete() public boolean length() public String getName() public String getPath() Chapter 9

49 Binary Files Binary files store data in the same format used for main memory. Bytes in main memory and bytes in binary files are read similarly, which leads to efficiency. Binary files created by a Java program on one computer can read by a Java program on a different computer. Chapter 9

50 Binary Files, cont. Class ObjectInputStream and class ObjectOutputStream are used to process binary files. Data is read or written, one byte at a time. Numbers and characters are converted automatically to bytes for storage in a binary file. Data in files can be treated as Java primitive data types, as strings, or as other objects. Chapter 9

51 Opening a Binary File syntax example
ObjectOutputStream Output_Stream_Name = new ObjectOutputStream (new FileOutputStream(File_Name)); example ObjectOutputStream myOutputStream = (new FileOutputStream (“myfile.dat”)); Chapter 9

52 Output to Binary Files Using ObjectOutputStream
class BinaryOutputDemo Chapter 9

53 Output to Binary Files Using ObjectOutputStream, cont.
The numbers are not in human-readable form because there are no lines or other separators. Chapter 9

54 Some Methods in Class ObjectOutputStream
to create public ObjectOutputStream(OutputStream streamObject) to create a stream new ObjectOutputStream (new FileOutputStream (File_Name_or_File_Object)) to write a primitive type public void writeInt(int n) throws IOException Chapter 9

55 Some Methods in Class ObjectOutputStream, cont.
to write a primitive type, cont. public void writeLong(long n) throws IOException public void writeDouble(double x) throws IOException public void writeFloat(float x) Chapter 9

56 Some Methods in Class ObjectOutputStream, cont.
public void writeChar(int n) throws IOException public void writeBoolean(boolean b) to write a String public void writeUTF(String aString) Chapter 9

57 Some Methods in Class ObjectOutputStream, cont.
To write an object public void writeObject(Object anObject) throws IOException, NotSerializableException, InvalidClassException to close public void close() throws IOException Chapter 9

58 Some Methods in Class ObjectOutputStream, cont.
to flush public void flush() throws IOException Chapter 9

59 Some Methods in Class ObjectOutputStream, cont.
There is no method writeString. Instead, use method writeUTF. UTF stands for Unicode Text Format. UTF provides short, efficient codes for ASCII characters. Chapter 9

60 Different Types in the Same File
Different types can be written to the same file. However, the different types must be read from the file just as they were written to the file. Chapter 9

61 Reading Input from a Binary File Using ObjectInputStream
A file written using ObjectOutputStream can be read using ObjectInputStream. The methods in class ObjectInputStream correspond to the methods in class ObjectOutputStream. Chapter 9

62 Some Methods in Class ObjectInputStream
to create ObjectInputStream (InputStream streamObject) to create a stream new ObjectInputStream (new FileInputStream (File_Name_or_File_Object) to read a primitive type public int readInt() throws IOException Chapter 9

63 Some Methods in Class ObjectInputStream, cont.
to read a primitive type, cont. public long readLong() throws IOException public double readDouble() public float readFloat() public char readChar() public boolean ReadBoolean() Chapter 9

64 Some Methods in Class ObjectInputStream, cont.
to read a String public String readUTF() throws IOException to read an object public Object readObject() throws ClassNotFoundException, InvalidClassException, OptionalDataException, IOException to close public void close() throws IOException Chapter 9

65 Opening an Input File syntax example
ObjectInputStream Input_Stream_Name = new ObjectInputStream(new FileInputStream(File_Name)); example ObjectInputStream myInputStream = new ObjectInputStream(new FileInputStream(“myfile.dat”)); Chapter 9

66 The EOFException Class
ObjectInputStream methods that read from a binary file throw an EOFException when they try to read beyond the end of the file. When using class ObjectInputStream, the class EOFException can test for the end of a file. Chapter 9

67 The EOFException Class
class EOFExceptionDemo Chapter 9

68 Checking for the End of File
Different classes with file reading methods check for the end of a file in different ways. Binary files throw an exception in the class EOFException. A text file returns a special value, such as null. Be sure to test for the end of the file in the correct way. Chapter 9

69 The Classes FileInputStream and FileOutputStream
We used stream class FileInputStream when we created a stream of class ObjectInputStream. We used stream class FileOutputStream when we created a stream of class ObjectOutputStream. Chapter 9

70 The Classes FileInputStream and FileOutputStream, cont.
FileOutputStream and FileInputStream accept a file name as a constructor argument. Neither ObjectInputStream nor ObjectOutputStream accepts a file name as an argument. Chapter 9

71 Binary I/O of Class Objects
Using method writeObject of class ObjectOutputStream you can output class objects to a binary file, and then read objects from the file using method readObject of class ObjectInputStream. However, the class being written and read must be serializable. Chapter 9

72 Binary I/O of Class Objects, cont.
To make a class serializable, add implements Serializable to the class heading. example public class SomeClass implements Serializable The Serializable interface is available after importing java.io.* Chapter 9

73 Binary I/O of Class Objects, cont.
class Species Chapter 9

74 Binary I/O of Class Objects, cont.
class IODemo Chapter 9

75 Files and toString Method toString provides convenient output to the screen and to a text file. However, method toString is not needed for object I/O to a binary file. Chapter 9

76 The Serializable Interface
A class which is serializable affects how Java performs file I/O with objects of the class. Java assigns a serial number to each object of the class that it writes to a stream of type ObjectOutputStream. If the object is written more than once, Java writes only the serial number for the object. Chapter 9

77 Graphics Supplement class FileOrganizer Chapter 9

78 Graphics Supplement, cont.
class FileOrganizer, cont. Chapter 9

79 Graphics Supplement, cont.
class FileOrganizer, cont. Chapter 9

80 Graphics Supplement, cont.
Chapter 9


Download ppt "Streams and File I/O Chapter 9 Chapter 9."

Similar presentations


Ads by Google