File Input & Output
Upcoming SlideShare
Loading in...5
×
 

File Input & Output

on

  • 171 views

Chapter 10

Chapter 10

Statistics

Views

Total Views
171
Views on SlideShare
165
Embed Views
6

Actions

Likes
0
Downloads
10
Comments
0

1 Embed 6

http://sotlsoc.net 6

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • When a program that manipulates a large amount of data practical, we must save the data to a file. If we don’t, then the user must reenter the same data every time he or she runs the program because any data used by the program will be erased from the main memory at program termination. <br /> If the data were saved, then the program can read them back from the file and rebuild the information so the user can work on the data without reentering them. In this chapter you will learn how to save data to and read data from a file. We call the action of saving data to a file file output and the action of reading data from a file file input. <br /> Note: The statements <br /> new File( “C:\SamplePrograms”, “one.txt”); <br /> and <br /> new File(“C:\SamplePrograms\one.text”); <br /> will open the same file. <br />
  • We can start the listing from a current directory by writing <br /> String current = System.getProperty(&quot;user.dir&quot;); <br /> JFileChooser chooser = new JFileChooser(current); <br /> or equivalently <br /> String current = System.getProperty(&quot;user.dir&quot;); <br /> JFileChooser chooser = new JFileChooser( ); <br /> chooser.setCurrentDirectory(new File(current)); <br />
  • We can start the listing from a current directory by writing <br /> String current = System.getProperty(&quot;user.dir&quot;); <br /> JFileChooser chooser = new JFileChooser(current); <br /> or equivalently <br /> String current = System.getProperty(&quot;user.dir&quot;); <br /> JFileChooser chooser = new JFileChooser( ); <br /> chooser.setCurrentDirectory(new File(current)); <br />
  • Data is saved in blocks of bytes to reduce the time it takes to save all of our data. <br /> The operation of saving data as a block is called data caching. <br /> To carry out data caching, part of memory is reserved as a data buffer or cache, which is used as a temporary holding place. <br /> Data are first written to a buffer. When the buffer becomes full, the data in the buffer are actually written to a file. <br /> If there are any remaining data in the buffer and the file is not closed, those data will be lost. <br />
  • class TestFileOutputStream <br /> { <br /> public static void main (String[] args) throws IOException <br /> { <br /> //set up file and stream <br /> FileoutFile = new File(&quot;sample1.data&quot;); <br /> FileOutputStreamoutStream = new FileOutputStream(outFile); <br /> //data to output <br /> byte[] byteArray = {10, 20, 30, 40, 50, 60, 70, 80}; <br /> //write data to the stream <br /> outStream.write(byteArray); <br /> //output done, so close the stream <br /> outStream.close(); <br /> } <br /> } <br /> The main method throws an exception. Exception handling is described in Section 11.4. <br />
  • import javabook.*; <br /> import java.io.*; <br /> class TestFileInputStream <br /> { <br /> public static void main (String[] args) throws IOException <br /> { <br /> MainWindow mainWindow = new MainWindow(); <br /> OutputBox outputBox = new OutputBox(mainWindow); <br /> mainWindow.setVisible( true ); <br /> outputBox.setVisible( true ); <br /> //set up file and stream <br /> FileinFile= new File(&quot;sample1.data&quot;); <br /> FileInputStream inStream = new FileInputStream(inFile); <br /> //set up an array to read data in <br /> int fileSize = (int)inFile.length(); <br /> byte[] byteArray = new byte[fileSize]; <br /> //read data in and display them <br /> inStream.read(byteArray); <br /> for (int i = 0; i &lt; fileSize; i++) { <br /> outputBox.printLine(byteArray[i]); <br /> } <br /> //input done, so close the stream <br /> inStream.close(); <br /> } <br /> } <br />

File Input & Output File Input & Output Presentation Transcript

  • File Input and Output
  • Objectives  After you have read and studied this chapter, you should be able to  Use File object to get info about a file  Include a JFileChooser object in your program to let the user specify a file.  Write bytes to a file and read them back from the file, using FileOutputStream and FileInputStream.  Write values of primitive data types to a file and read them back from the file, using DataOutputStream and DataInputStream.  Write text data to a file and read them back from the file, using FileWriter,PrintWriter and FileReader,BufferedReader  Read a text file using Scanner
  • File  File is regarded as a collection of bytes  When a file is read, computer delivers some of those bytes to the program.  When a file is written, computer accepts some bytes from the program and saves them in part of the file.  Computer makes no distinction between eg. image files and text files. Its all bytes to the hardware. What those bytes are used for is up to the software.
  • Types of File  All information in any file is kept in binary form.
  • Types of File  File can be categorized as text (ASCII) file or binary file.  A text file is a file that contains bytes that represent:  characters 'A' through 'Z'  characters 'a' through 'z'  characters '0' through '9'  the space character  punctuation and symbols like . , : ; " + - $ (and others)  a few control characters that represent end of lines, tabs and some other things. using ASCII Codes  A binary file is a file that contains bytes that represent others (eg. numbers, image, audio, formatted text etc)
  • The File Class The File class (from java.io). can be used to obtain info about file  To do this, we must first create a File object  A File object can represent a file or a directory File inFile = new File(“sample.dat”); File inFile = new File (“C:/SamplePrograms/test.dat”); Creates File object for the file sample.dat in the current directory. Creates File object for the file sample.dat in the current directory. Creates File object for the file test.dat in the directory C:SamplePrograms using the generic file separator / and providing the full pathname. Creates File object for the file test.dat in the directory C:SamplePrograms using the generic file separator / and providing the full pathname.
  • Some File Methods if ( inFile.exists( ) ) { if ( inFile.isFile() ) { File directory = new File("C:/JavaPrograms/Ch12"); String filename[] = directory.list(); for (int i = 0; i < filename.length; i++) { System.out.println(filename[i]); } To see if inFile is associated to a real file correctly. To see if inFile is associated to a real file correctly. To see if inFile is associated to a file. If false, it is a directory. Also, can test directly if it is a directory. To see if inFile is associated to a file. If false, it is a directory. Also, can test directly if it is a directory. List the name of all files in the directory C:JavaProjectsCh12 List the name of all files in the directory C:JavaProjectsCh12 if ( inFile.isDirectory() ) {
  • Some File Methods if ( inFile.length( ) ) { if ( inFile.canRead() ) { To see the size of the file in bytes represented by inFile To see the size of the file in bytes represented by inFile To see if inFile is associated to a file that exist & can be read To see if inFile is associated to a file that exist & can be read if ( inFile.canWrite() ) { To see if inFile is associated to a file that exist & can be written To see if inFile is associated to a file that exist & can be written if ( inFile.getName() ) { To get the name of the file represented by inFile To get the name of the file represented by inFile
  • The JFileChooser Class  A javax.swing.JFileChooser object allows the user to select a file. JFileChooser chooser = new JFileChooser( ); chooser.showOpenDialog(null); JFileChooser chooser = new JFileChooser("D:/JavaPrograms/Ch12"); chooser.showOpenDialog(null); To start the listing from a specific directory:
  • The JFileChooser Class
  • Getting Info from JFileChooser int status = chooser.showOpenDialog(null); if (status == JFileChooser.APPROVE_OPTION) { JOptionPane.showMessageDialog(null, "Open is clicked"); } else { //== JFileChooser.CANCEL_OPTION JOptionPane.showMessageDialog(null, "Cancel is clicked"); } File selectedFile = chooser.getSelectedFile(); File currentDirectory = chooser.getCurrentDirectory();
  • I/O Streams  To read data from or write data to a file, we must create one of the Java stream objects and attach it to the file.  A stream is a sequence of data items, usually 8-bit bytes.  Java has two types of streams: an input stream and an output stream.  An input stream has a source form which the data items come, and an output stream has a destination to which
  • I/O Streams
  • I/O Streams  IO streams are either character-oriented or byte- oriented.  Character-oriented IO has special features for handling character data (text files).  Byte-oriented IO is for all types of data (binary files) IO class Hierarchy in java.io package
  • Streams for Byte –level Binary File I/O  FileOutputStream and FileInputStream are two stream objects that facilitate file access.  FileOutputStream allows us to output a sequence of bytes; values of data type byte.  FileInputStream allows us to read in an array of bytes.
  • Sample: Byte-level Binary File Output//set up file and stream File outFile = new File("sample1.data"); FileOutputStream outStream = new FileOutputStream( outFile ); //data to save byte[] byteArray = {10, 20, 30, 40, 50, 60, 70, 80}; //write data to the stream outStream.write( byteArray ); //output done, so close the stream outStream.close();
  • Sample: Byte-level Binary File Input//set up file and stream File inFile = new File("sample1.data"); FileInputStream inStream = new FileInputStream(inFile); //set up an array to read data in int fileSize = (int)inFile.length(); byte[] byteArray = new byte[fileSize]; //read data in and display them inStream.read(byteArray); for (int i = 0; i < fileSize; i++) { System.out.println(byteArray[i]); } //input done, so close the stream inStream.close();
  • Streams for Data-Level Binary File I/O  FileOutputStream and DataOutputStream are used to output primitive data values  FileInputStream and DataInputStream are used to input primitive data values  To read the data back correctly, we must know the order of the data stored and their data types
  • Setting up DataOutputStream A standard sequence to set up a DataOutputStream object:
  • Sample Output import java.io.*; class Ch12TestDataOutputStream { public static void main (String[] args) throws IOException { . . . //set up outDataStream //write values of primitive data types to the stream outDataStream.writeInt(987654321); outDataStream.writeLong(11111111L); outDataStream.writeFloat(22222222F); outDataStream.writeDouble(3333333D); outDataStream.writeChar('A'); outDataStream.writeBoolean(true); //output done, so close the stream outDataStream.close(); } }
  • Setting up DataInputStream A standard sequence to set up a DataInputStream object:
  • Sample Input import java.io.*; class Ch12TestDataInputStream { public static void main (String[] args) throws IOException { . . . //set up inDataStream //read values back from the stream and display them System.out.println(inDataStream.readInt()); System.out.println(inDataStream.readLong()); System.out.println(inDataStream.readFloat()); System.out.println(inDataStream.readDouble()); System.out.println(inDataStream.readChar()); System.out.println(inDataStream.readBoolean()); //input done, so close the stream inDataStream.close(); } }
  • Reading Data Back in Right Order The order of write and read operations must match in order to read the stored primitive data back correctly.
  • Reading & Writing Textfile  Instead of storing primitive data values as binary data in a file, we can convert and store them as a string data. This allows us to view the file content using any text editor  To write data as a string to text file, use a FileWriter and PrintWriter object  To read data from textfile, use FileReader and BufferedReader classes From Java 5.0 (SDK 1.5), we can also use the Scanner class for reading textfiles
  • Sample Writing to Textfile import java.io.*; class Ch12TestPrintWriter { public static void main (String[] args) throws IOException { //set up file and stream File outFile = new File("sample3.data"); FileWriter outFileStream = new FileWriter(outFile); PrintWriter outStream = new PrintWriter(outFileStream); //write values of primitive data types to the stream outStream.println(987654321); outStream.println("Hello, world."); outStream.println(true); //output done, so close the stream outStream.close(); } }
  • Sample Reading from Textfileimport java.io.*; class Ch12TestBufferedReader { public static void main (String[] args) throws IOException { //set up file and stream File inFile = new File("sample3.data"); FileReader fileReader = new FileReader(inFile); BufferedReader bufReader = new BufferedReader(fileReader); String str; str = bufReader.readLine(); int i = Integer.parseInt(str); //similar process for other data types bufReader.close(); } }
  • Sample Reading Textfile using Scanner import java.io.*; class Ch12TestScanner { public static void main (String[] args) throws IOException { //open the Scanner File inFile = new File("sample3.data"); Scanner scanner = new Scanner(inFile); //get integer int i = scanner.nextInt(); //similar process for other data types scanner.close(); } }
  • try{ // read line one by one till all line is read. Scanner scanner = new Scanner(inFile); while (scanner.hasNextLine()) { //check if there are more line String line = scanner.nextLine(); System.out.println(line); } } catch (FileNotFoundException e) { e.printStackTrace(); } Sample Reading Textfile using Scanner Code fragments shows how to read the whole contents of a file Use hasNextLine() & nextLine() methods