0% found this document useful (0 votes)
75 views21 pages

New CH2 - 2

1. Important classes for reading and writing text files in Java include PrintWriter, FileOutputStream, BufferedReader, and FileReader. 2. To write to a text file, a PrintWriter object is created and connected to a FileOutputStream, allowing text to be written to the file. 3. To read from a text file, a BufferedReader object is created and connected to a FileReader, allowing text to be read line by line from the file.

Uploaded by

biruk
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
75 views21 pages

New CH2 - 2

1. Important classes for reading and writing text files in Java include PrintWriter, FileOutputStream, BufferedReader, and FileReader. 2. To write to a text file, a PrintWriter object is created and connected to a FileOutputStream, allowing text to be written to the file. 3. To read from a text file, a BufferedReader object is created and connected to a FileReader, allowing text to be read line by line from the file.

Uploaded by

biruk
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 21

Chapter 2 – 2

1
Text File I/O
• Important classes for text file output (to the file)
– PrintWriter
– FileOutputStream [or FileWriter]
• Important classes for text file input (from the file):
– BufferedReader
– FileReader
• FileOutputStream and FileReader take file names as arguments.
• PrintWriter and BufferedReader provide useful methods for
easier writing and reading.
• Usually need a combination of two classes
• To use these classes your program needs a line like the following:
import java.io.*;

2
Text File Output
• To open a text file for output: connect a text file to a stream for
writing

PrintWriter outputStream =
new PrintWriter(new FileOutputStream("out.txt"));

• Similar to the long way:


FileOutputStream s = new FileOutputStream("out.txt");
PrintWriter outputStream = new PrintWriter(s);

• Goal: create a PrintWriter object


– which uses FileOutputStream to open a text file
• FileOutputStream “connects” PrintWriter to a text file.
3
Methods for PrintWriter
• Similar to methods for System.out
• println

outputStream.println(count + " " + line);

• print
• format
• flush: write buffered output to disk
• close: close the PrintWriter stream (and file)

4
Example
public static void main(String[] args)
{
PrintWriter outputStream = null;
try
{
outputStream = new PrintWriter(new
FileOutputStream("out.txt"));
}
catch(FileNotFoundException e)
{
System.out.println("Error opening the file out.txt. “
+ e.getMessage());
System.exit(0);
}

5
System.out.println("Enter three lines of text:");
String line = null;
int count;
for (count = 1; count <= 3; count++)
{
line = keyboard.nextLine();
outputStream.println(count + " " + line);
}
outputStream.close();
System.out.println("... written to out.txt.");
}

6
Overwriting a File
• Opening an output file creates an empty file
• Opening an output file creates a new file if it does not already exist
• Opening an output file that already exists eliminates the old file and creates a new, empty one
- data in the original file is lost
• To add/append to a file instead of replacing it, use a different constructor for
outputStream = new PrintWriter(new FileOutputStream("out.txt", true));

Closing a File

• An output file should be closed when you are done writing to it.
• Use the close method of the class PrintWriter (BufferedReader also has a close
method).
• For example, to close the file opened in the previous example:
outputStream.close();
• If a program ends normally it will close any files that are open.
7
Text File Input
• To open a text file for input: connect a text file to a stream for reading

– Goal: a BufferedReader object,

• which uses FileReader to open a text file

– FileReader “connects” BufferedReader to the text file

• For example:

BufferedReader xyz = new BufferedReader(new FileReader(“xyz.txt"));

• Similarly, the long way:

FileReader s = new FileReader(“smiley.txt");

BufferedReader smileyInStream = new BufferedReader(s);

8
Methods for BufferedReader
• readLine: read a line into a String

• no methods to read numbers directly, so read


numbers as Strings and then convert them
(StringTokenizer later)

• read: read a char at a time

• close: close BufferedReader stream


9
Reading Words in a String:
Using StringTokenizer Class
• There are BufferedReader methods to read a line and a
character, but not just a single word
• StringTokenizer can be used to parse a line into words
– import java.util.*
– you can specify delimiters (the character or characters that
separate words)
• the default delimiters are "white space" (space, tab, and
newline)

10
Testing for End of File in a Text File
• When readLine tries to read beyond the end of a text file it returns the
special value null - so you can test for null to stop processing a text file

• read returns -1 when it tries to read beyond the end of a text file

• Neither of these two methods (read and readLine) will throw an


EOFException.
int count = 0;
String line = inputStream.readLine();
while (line != null)
{
count++;
outputStream.println(count + " " + line);
line = inputStream.readLine();
} 11
File Class [java.io]
• A file name like "numbers.txt" has only String properties
• File class has some very useful methods
– exists: tests if a file already exists
– canRead: tests if the OS will let you read a file
– canWrite: tests if the OS will let you write to a file
– delete: deletes the file, returns true if successful
– length: returns the number of bytes in the file
– getName: returns file name, excluding the preceding path
– getPath: returns the path name—the full name
File numFile = new File(“numbers.txt”);
if (numFile.exists())
System.out.println(numfile.length());
12
Alternative with Scanner
• Instead of BufferedReader with
FileReader, then StringTokenizer
• Use Scanner with File:

Scanner inFile = new Scanner(new File(“in.txt”));

• Similar to Scanner with System.in:

Scanner keyboard = new Scanner(System.in);

13
Reading in int
Scanner inFile = new Scanner(new File(“in.txt"));
int number;
while (inFile.hasInt())
{
number = inFile.nextInt();
// …
}
Reading in lines of characters
Scanner inFile = new Scanner(new File(“in.txt"));
String line;
while (inFile.hasNextLine())
{
line = inFile.nextLine();
// …
} 14
BufferedReader vs Scanner
(parsing primitive types)
• Scanner

– nextInt(), nextFloat(), … for parsing types

• BufferedReader

– read(), readLine(), … none for parsing types

– needs StringTokenizer then wrapper class methods


like Integer.parseInt(token)

15
BufferedReader vs Scanner
(Checking End of File/Stream (EOF))
• BufferedReader
– readLine() returns null
– read() returns -1
• Scanner
– nextLine() throws exception
– needs hasNextLine() to check first
– nextInt(), hasNextInt(), …

16
Opening a New Output File
• The file name is given as a String
– file name rules are determined by your operating system
• Opening an output file takes two steps
1. Create a FileOutputStream object associated with the file
name String
2. Connect the FileOutputStream to an
ObjectOutputStream object
• This can be done in one line of code
• To open a file named numbers.dat:
ObjectOutputStream outputStream =
new ObjectOutputStream(
new FileOutputStream("numbers.dat"));

17
• Writing a Character to a File
– just cast the character to an int
– For example, to write the character 'A' to the file opened previously:
outputStream.writeChar((int) 'A');
– Or, just use the automatic conversion from char to int
• Writing a boolean Value to a File
• boolean values can be either of two values, true or false
• For example, to write the boolean value false to the output file:
outputStream.writeBoolean(false);
• Writing Strings to a File:
• Use the writeUTF method to output a value of type String
– there is no writeString method
• UTF stands for Unicode Text Format
– a special version of Unicode

18
Opening a New Input File
• Similar to opening an output file, but replace "output" with "input"

• The file name is given as a String

– file name rules are determined by your operating system

• Opening a file takes two steps

1. Creating a FileInputStream object associated with the file name String

2. Connecting the FileInputStream to an ObjectInputStream object

• This can be done in one line of code

• To open a file named numbers.dat:

ObjectInputStream inStream =
new ObjectInputStream (new FileInputStream("numbers.dat"));

19
Summary
• Text files contain strings of printable characters; they look intelligible to
humans when opened in a text editor.
• Binary files contain numbers or data in non-printable codes; they look
unintelligible to humans when opened in a text editor.
• Java can process both binary and text files, but binary files are more
common when doing file I/O.
• The class ObjectOutputStream is used to write output to a binary
file.
• The class ObjectInputStream is used to read input from a binary
file.
• Always check for the end of the file when reading from a file. The way
you check for end-of-file depends on the method you use to read from
the file.
• A file name can be read from the keyboard into a String variable and
the variable used in place of a file name.
• The class File has methods to test if a file exists and if it is read- and/or
write-enabled.
• Serializable class objects can be written to a binary file.
20
End of Ch.4
Questions, Ambiguities, Doubts, … ???

21

You might also like