Streams and File I/O (That is, Input/Output) - PowerPoint PPT Presentation

About This Presentation
Title:

Streams and File I/O (That is, Input/Output)

Description:

Some new file-reading code added to the code that created ... Note that using any of the BufferedReader methods results in reading either a String or a char. ... – PowerPoint PPT presentation

Number of Views:64
Avg rating:3.0/5.0
Slides: 56
Provided by: dsza
Category:
Tags: file | input | output | setup | streams

less

Transcript and Presenter's Notes

Title: Streams and File I/O (That is, Input/Output)


1
Streams and File I/O (That is,
Input/Output)
  • OR
  • How you read data from files and write data to
    files

2
Streams
  • Abstractly, a stream is a flow of data
  • Data could be characters, numbers, bytes
    consisting of binary digits, bytes consisting of
    binary encoding of objects, etc.
  • If the data flows out of your program (and,
    say, to a file or the monitor) then the stream is
    an output stream
  • If the data flows in to your program, then the
    stream is an input stream

3
Streams
  • In Java, file I/O (and also simple
    keyboard/monitor I/O) is handled by streams
  • In Java, a stream is an object that either
    delivers data to its destination (such as a file
    or monitor) or takes data from a source (such as
    a file or keyboard) and delivers it to your
    program
  • System.out is an example of an output stream

4
Streams
File, Monitor, Network, Etc.
output stream
Program
File, Keyboard, Network, Etc.
input stream
5
Remember
  • An input stream moves data into your program (not
    into a file)
  • An output stream moves data out of your program
    (not out of the file)

6
Binary vs Text Files
  • All data in any file is stored as a sequence of
    bits. But, sometimes we think of the file as
    consisting of a sequence of characters (for
    example, your Java source code files), and some
    we think of as simply containing a sequence of
    binary digits (such as a file containing the
    machine code for a program)
  • The files of characters are called text files
  • The files of bits are called binary files
  • Java has objects to handle I/O to both kinds of
    files. Well only work with text files

7
Text File I/O
  • Best to just start with an example well add
    some file I/O to StudentRecord

Must be here!
8
Text File I/O (cont.)
  • We use the println() method in the class
    PrintWriter (not System.out.println(), but acts
    the same)

Returns a reference to an OutputStream object
9
(No Transcript)
10
(No Transcript)
11
Whats with these?!
12
Another Look
13
Whats With This trycatch Thing?!
  • This is an example of exception handling in Java
    (which we may cover more completely at a later
    date)
  • For now, know that this says execute the
    statements in the try block. If something goes
    wrong, then stop and execute the statements in
    the catch block
  • Lots can go wrong with file I/O (e.g. the file
    may not exist, or you may not have permission to
    access it)

14
Subtle and Very Important
If written this way, the variable outputStream
is local to the try block!
15
Still Another Look
Here its visible throughout the whole method
Whats with this?!
16
So, How Do We Use These Things?!
  • Just like you use System.out.println(), though
    there are also methods specially designed to
    print doubles, chars, etc.

17
Writing To a File (cont.)
18
Writing To a File (cont.)
Why dont I need to use getName() here?
19
Still More Writing To a File
20
(No Transcript)
21
close() the Stream!
  • Calling the close() method
  • Flushes the stream
  • Operating system releases all resources needed to
    connect the stream to the file, and performs
    other housekeeping
  • If stream isnt closed, Java closes it when the
    program ends, but youre taking a chance
  • If program ends abnormally, then Java may not be
    able to automatically close the stream and you
    could lose data
  • You need to close a stream before reading from
    the same file

22
A True Story
23
Why Ever flush() a Stream?
  • There are situations where you want the stream to
    remain open (youre still using it), but you need
    to be sure data goes to output device
  • Writing to a network interface
  • During long operations on a file, flush stream in
    case there is some kind of abnormality
  • OS crash, etc.

24
Miscellaneous
  • File names The file name you give Java is simply
    a String. It doesnt know about suffixes and the
    like. Thats the OSs thing.
  • Opening a text file for appending

Indicates open for appending
25
Streams and File I/O Part II
  • Reading from Files

26
BufferedReader Class
  • The BufferedReader class is the input stream
    equivalent of the PrintWriter class
  • The constructor requires a similar setup
  • The class methods are analogous
  • Remember to import java.io.
  • Remember this is for reading text files

27
(No Transcript)
28
The FileReader class is a subclass of the Reader
class, so using it in the constructor is legal
29
(No Transcript)
30
Whats with this override thing?
Note the exceptions that can be thrown
31
Reading From Files
  • As with writing to files, you need to know
    where you are in the file when reading
  • Unlike with writing, you need to know when you
    have run out of stuff to read in the file
  • When reading, you generally need to have a place
    (i.e. a variable) to put the data you have read
  • Beware there are many subtleties here

32
(No Transcript)
33
(No Transcript)
34
Example
  • Some new file-reading code added to the code that
    created the file profsGrades.txt

35
Example (cont.)
Adding a simple cast to a char will fix this
problem, but there are others (see next slide)
36
(No Transcript)
37
Note the Changes
  • The entirety of the input code is in the try
    block (including closing the stream), not just
    the memory allocation for the stream
  • There are two different classes of exceptions
    that are caught here FileNotFoundException and
    IOException
  • This is how you should write your I/O code!

38
Running the Example Code
39
Augmenting Our Code
  • What the read documentation didnt tell you is
    that the read() method returns the integer value
    ?1 if there is no more file to read
  • Well use this to modify our code to read (and
    print to standard output) the entire file

40
NOTE! (see next slide)
41
Notes From Last Slide
  • myChar is declared an int, since well need to
    check an integer value to see if were at the end
    of the file
  • We use an infinite loop to keep iterating until
    weve read the entire file
  • We call the read() method within the conditional
    for the if statement. Regardless of whether the
    condition is true, the call to read() occurs
    (this is a standard hack for this kind of code)

42
More Notes
  • We use the print() method as opposed to the
    println() method when a newline character is
    encountered, this will cause a new line in the
    output
  • We perform the cast to char inside the
    System.out.print () statement

43
There Are Easier Ways
  • Use another version of the read() method to read
    characters into a char array
  • Use the readline() method, which reads a whole
    line at a time into a String

44
(No Transcript)
45
More read() Documentation
46
Often the Best Way
47
A problem
48
The Problem
  • The readLine() method returns the value null if
    it reaches the end of file. When this happens,
    the variable currentLine is assigned the value
    null, which causes a NullPointerException when we
    try to call its equals() method in the if
    statement. See the fix on either of the next two
    slides (the first is the recommended fix)

49
A fix
50
Another fix
51
Reading Numeric Data Types
  • Note that using any of the BufferedReader methods
    results in reading either a String or a char. To
    read a double or int or other numerical data
    type, you need to
  • Use methods like stringToInt()
  • Use methods like Double.parseDouble(String input)
  • The method Integer.parseInt(String input) is the
    exact equivalent of stringToInt()

52
Finally, Reading Input From the Keyboard
  • The keyboard is an input device like any other,
    and we can read it with an input stream
  • We use the read() method in System.in
  • This works like our other read() method, but
    reads from the keyboard
  • We use the above read() method to create a static
    readLine() method that we can call to read from
    the keyboard

53
(No Transcript)
54
This is needed in order to handle both Unix and
Windows style end of line conventions
55
A Tester For KeyboardIn
  • Dont forget that we need to use a try block with
    this
Write a Comment
User Comments (0)
About PowerShow.com