Simple Java IO - PowerPoint PPT Presentation

1 / 41
About This Presentation
Title:

Simple Java IO

Description:

'They say you can hold seven plus or minus two pieces of information in your mind. ... Even if they insisted on using the Decorator pattern in java.io, they should ... – PowerPoint PPT presentation

Number of Views:43
Avg rating:3.0/5.0
Slides: 42
Provided by: vil120
Category:

less

Transcript and Presenter's Notes

Title: Simple Java IO


1
Simple Java I/O
  • Part I
  • General Principles

2
Prologue
  • They say you can hold seven plus or minus two
    pieces of information in your mind. I cant
    remember how to open files in Java. Ive written
    chapters on it. Ive done it a bunch of times,
    but its too many steps. And when I actually
    analyze it, I realize these are just silly design
    decisions that they made. Even if they insisted
    on using the Decorator pattern in java.io, they
    should have had a convenience constructor for
    opening files simply. Because we open files all
    the time, but nobody can remember how. It is too
    much information to hold in your mind.
  • Bruce Eckel, http//www.artima.com/intv/aboutme2.
    html

3
Streams
  • All modern I/O is stream-based
  • A stream is a connection to a source of data or
    to a destination for data (sometimes both)
  • An input stream may be associated with the
    keyboard
  • An input stream or an output stream may be
    associated with a file
  • Different streams have different characteristics
  • A file has a definite length, and therefore an
    end
  • Keyboard input has no specific end

4
How to do I/O
  • import java.io.
  • Open the stream
  • Use the stream (read, write, or both)
  • Close the stream

5
Why Java I/O is hard
openuseclose
  • Java I/O is very powerful, with an overwhelming
    number of options
  • Any given kind of I/O is not particularly
    difficult
  • The trick is to find your way through the maze of
    possibilities

6
Opening a stream
openuseclose
  • There is data external to your program that you
    want to get, or you want to put data somewhere
    outside your program
  • When you open a stream, you are making a
    connection to that external place
  • Once the connection is made, you forget about the
    external place and just use the stream

7
Example of opening a stream
openuseclose
  • A FileReader is a used to connect to a file that
    will be used for input
  • FileReader fileReader new
    FileReader(fileName)
  • The fileName specifies where the (external) file
    is to be found
  • You never use fileName again instead, you use
    fileReader

8
Using a stream
openuseclose
  • Some streams can be used only for input, others
    only for output, still others for both
  • Using a stream means doing input from it or
    output to it
  • But its not usually that simple--you need to
    manipulate the data in some way as it comes in or
    goes out

9
Example of using a stream
openuseclose
  • int chch fileReader.read( )
  • The fileReader.read() method reads one character
    and returns it as an integer, or -1 if there are
    no more characters to read
  • The meaning of the integer depends on the file
    encoding (ASCII, Unicode, other)

10
Manipulating the input data
openuseclose
  • Reading characters as integers isnt usually what
    you want to do
  • A BufferedReader will convert integers to
    characters it can also read whole lines
  • The constructor for BufferedReader takes a
    FileReader parameter
  • BufferedReader bufferedReader new
    BufferedReader(fileReader)

11
Reading lines
openuseclose
  • String ss bufferedReader.readLine( )
  • A BufferedReader will return null if there is
    nothing more to read

12
Closing
openuseclose
  • A stream is an expensive resource
  • There is a limit on the number of streams that
    you can have open at one time
  • You should not have more than one stream open on
    the same file
  • You must close a stream before you can open it
    again
  • Always close your streams!

13
Simple Java I/O
  • Part IILineReader and LineWriter

14
Text files
  • Text (.txt) files are the simplest kind of files
  • text files can be used by many different programs
  • Formatted text files (such as .doc files) also
    contain binary formatting information
  • Only programs that know the secret code can
    make sense of formatted text files
  • Compilers, in general, work only with text

15
My LineReader class
class LineReader BufferedReader
bufferedReader LineReader(String fileName)
... String readLine( ) ... void close(
) ...
16
Basics of the LineReader constructor
  • Create a FileReader for the named file
  • FileReader fileReader new
    FileReader(fileName)
  • Use it as input to a BufferedReader
  • BufferedReader bufferedReader new
    BufferedReader(fileReader)
  • Use the BufferedReader but first, we need to
    catch possible Exceptions

17
The full LineReader constructor
LineReader(String fileName) FileReader
fileReader null try fileReader new
FileReader(fileName) catch
(FileNotFoundException e)
System.err.println ("LineReader can't
find input file " fileName)
e.printStackTrace( ) bufferedReader
new BufferedReader(fileReader)
18
readLine
String readLine( ) try return
bufferedReader.readLine( )
catch(IOException e) e.printStackTrace(
) return null
19
close
void close() try
bufferedReader.close( )
catch(IOException e)
20
How did I figure that out?
  • I wanted to read lines from a file
  • I thought there might be a suitable readSomething
    method, so I went to the API Index
  • Note Capital letters are all alphabetized before
    lowercase in the Index
  • I found a readLine method in several classes the
    most promising was the BufferedReader class
  • The constructor for BufferedReader takes a Reader
    as an argument
  • Reader is an abstract class, but it has several
    implementations, including InputStreamReader
  • FileReader is a subclass of InputStreamReader
  • There is a constructor for FileReader that takes
    as its argument a (String) file name

21
The LineWriter class
class LineWriter PrintWriter printWriter
LineWriter(String fileName) ... void
writeLine(String line) ... void close( )
...
22
The constructor for LineWriter
LineWriter(String fileName) try
printWriter new PrintWriter(
new FileOutputStream(fileName), true)
catch(Exception e)
System.err.println("LineWriter can't "
"use output file " fileName)
23
Flushing the buffer
  • When you put information into a buffered output
    stream, it goes into a buffer
  • The buffer may not be written out right away
  • If your program crashes, you may not know how far
    it got before it crashed
  • Flushing the buffer is forcing the information to
    be written out

24
PrintWriter
  • Buffers are automatically flushed when the
    program ends normally
  • Usually it is your responsibility to flush
    buffers if the program does not end normally
  • PrintWriter can do the flushing for you
  • public PrintWriter(OutputStream out,
    boolean autoFlush)

25
writeLine
void writeLine(String line)
printWriter.println(line)
26
close
void close( ) printWriter.flush( )
try printWriter.close( ) catch(Exception
e)
27
Simple Java I/O
  • Part III
  • JChoosers

28
About JFileChoosers
  • The JFileChooser class displays a window from
    which the user can select a file
  • The dialog window is modal--the application
    cannot continue until it is closed
  • Applets cannot use a JFileChooser, because
    applets cannot access files

29
Typical JFileChooser window
30
JFileChooser constructors
  • JFileChooser()
  • Creates a JFileChooser starting from the users
    directory
  • JFileChooser(File currentDirectory)
  • Constructs a JFileChooser using the given File
    as the path
  • JFileChooser(String currentDirectoryPath)
  • Constructs a JFileChooser using the given path

31
Useful JFileChooser methods I
  • int showOpenDialog(Component enclosingJFrame)
  • Asks for a file to read returns a flag (see
    below)
  • int showSaveDialog(Component enclosingJFrame)
  • Asks where to save a file returns a flag (see
    below)
  • Returned flag value may be
  • JFileChooser.APPROVE_OPTION
  • JFileChooser.CANCEL_OPTION
  • JFileChooser.ERROR_OPTION

32
Useful JFileChooser methods II
  • File getSelectedFile()
  • showOpenDialog and showSaveDialog return a flag
    telling what happened, but dont return the
    selected file
  • After we return from one of these methods, we
    have to ask the JFileChooser what file was
    selected
  • If we are saving a file, the File may not
    actually exist yet

33
Using a File
  • Assuming that we have successfully selected a
    File
  • File file chooser.getSelectedFile()if (file
    ! null) String fileName
    file.getCanonicalPath() FileReader
    fileReader new FileReader(fileName)
    BufferedReader reader new BufferedReader(fileRea
    der)
  • File file chooser.getSelectedFile()if (file
    ! null) String fileName
    file.getCanonicalPath() FileOutputStream
    stream new FileOutputStream(fileName)
    writer new PrintWriter(stream, true)

34
Simple Java I/O
  • Part IV
  • Serialization

35
Serialization
  • You can also read and write objects to files
  • Object I/O goes by the awkward name of
    serialization
  • Serialization in other languages can be very
    difficult, because objects may contain references
    to other objects
  • Java makes serialization (almost) easy

36
Conditions for serializability
  • If an object is to be serialized
  • The class must be declared as public
  • The class must implement Serializable
  • The class must have a no-argument constructor
  • All fields of the class must be serializable
    either primitive types or serializable objects

37
Implementing Serializable
  • To implement an interface means to define all
    the methods declared by that interface, but...
  • The Serializable interface does not define any
    methods!
  • Question What possible use is there for an
    interface that does not declare any methods?
  • Answer Serializable is used as flag to tell Java
    it needs to do extra work with this class

38
Writing objects to a file
  • ObjectOutputStream objectOut new
    ObjectOutputStream( new BufferedOutputStream
    ( new FileOutputStream(fileName)))
  • objectOut.writeObject(serializableObject)
  • objectOut.close( )

39
Reading objects from a file
  • ObjectInputStream objectIn new
    ObjectInputStream( new BufferedInputStream(
    new FileInputStream(fileName)))
  • myObject (itsType)objectIn.readObject( )
  • objectIn.close( )

40
What have I left out?
  • Encrypted files, compressed files, files sent
    over internet connections, ...
  • Exceptions! All I/O involves Exceptions!
  • try statements involving I/O catch
    (IOException e) e.printStackTrace ( )

41
The End
Write a Comment
User Comments (0)
About PowerShow.com