1 chapter 11 – files and streams 1 introduction what are files? –long-term storage of large...

24
1 Chapter 11 – Files and Streams 1 Introduction What are files? Long-term storage of large amounts of data Persistent data exists after termination of program Files stored on secondary storage devices • Magnetic disks • Optical disks • Magnetic tapes • Class File Provides useful information about a file or directory – Does NOT open files, create files or

Upload: simon-clark

Post on 12-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

1

Chapter 11 – Files and Streams 1

Introduction• What are files?

– Long-term storage of large amounts of data

– Persistent data exists after termination of program

– Files stored on secondary storage devices• Magnetic disks

• Optical disks

• Magnetic tapes

• Class File– Provides useful information about a file or directory

– Does NOT open files, create files or process files

Page 2: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

2

File Objects

• To operate on a file, we must first create a File object (from the package java.io).

– Creates a file object that associates the file sample.dat in the current directory.

File inFile = new File("sample.dat");

– Creates a file object that associates the file test.dat in the directory C:\SamplePrograms

File inFile = new File ("C:/SamplePrograms/test.dat");

Page 3: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

3

Some File Methods• File provides a set of methods to examine files/directories.

- boolean exists()

Tests whether the file or directory exists.

- boolean isFile()

Tests whether the file is a normal file.

- boolean canWrite()

Tests whether the application can modify to the file.

- boolean isDirectory()

Tests whether the file is a directory.

- long length()

Returns the length of the file, 0 for directory.

- String[] list()

Returns an array of strings naming the files and subdirectories in the directory.

- String getName()

Returns the name of the file or directory.

Page 4: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

4Example 1

import java.io.*;public class FileTest { public static void main( String args[] ) { if (args.length != 1) {

System.out.println("Usage : FileTest <File Name>"); System.exit(0);

} File f = new File(args[0]);

System.out.println("f.exists() = " + f.exists()); System.out.println("f.isFile() = " + f.isFile()); System.out.println("f.isDirectory() = " + f.isDirectory()); System.out.println("f.length() = " + f.length());

if (f.isDirectory()) { String sub[] = f.list(); System.out.println("Content of this directory:"); for (int i=0; i<sub.length; i++) System.out.println(" " + sub[i]); }

}}

>java FileTest FileTEst.javaf.exists() = truef.isFile() = truef.isDirectory() = falsef.length() = 649

>java FileTest tempf.exists() = truef.isFile() = falsef.isDirectory() = truef.length() = 0Content of this directory: FileTest.java CapName.java StaticCharMethods.htm

Page 5: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

5

FileWriter

• Java views a file as a stream of bytes – File ends with end-of-file marker or a specific byte number

– File as a stream of bytes associated with an object

• Class FileWriter is used for output of character data to a disk file.

• The example program constructs a FileWriter stream.

• This also creates a disk file in the current directory, named "hello.txt". The write() method is called several times to write characters to the disk file. Then the file is closed.

Page 6: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

6

FileWriter

import java.io.*;

class WriteTextFile {

public static void main ( String[] args ) throws IOException {

String fileName = "hello.txt" ;

FileWriter OutFile = new FileWriter( fileName );

OutFile.write( "Java Programming is interesting\n" );

OutFile.write( "and challenging. Java file is very useful\n" );

OutFile.write( "and easy to operate.\n" );

OutFile.close();

}

}

Page 7: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

7

Sample Run

>dir06/04/00 07:55p <DIR> .06/04/00 07:55p <DIR> ..06/04/00 07:55p 693 WriteTextFile.class06/04/00 07:55p 475 WriteTextFile.java

>java WriteTextFile

>dir06/04/00 07:56p <DIR> .06/04/00 07:56p <DIR> ..06/04/00 07:56p 120 hello.txt06/04/00 07:55p 693 WriteTextFile.class06/04/00 07:55p 475 WriteTextFile.java

>type hello.txtJava Programming is interestingand challenging. Java file IO is veryuseful and easy to operate.

Content of "hello.txt"

Page 8: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

8

FileWriter Constructors

• The two constructors that interest us are:

FileWriter(String fileName)

FileWriter(String fileName, boolean append)

• If append is true, the second constructor will open an existing file for writing without destroying its contents. If the file does not exist, it will be created.

Page 9: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

9

IO Exception

• Most IO methods throw an IOException when an error is encountered.

• A method that uses one of these IO methods MUST either

(1) say throws IOException in its header, or

(2) perform its IO in a try-catch block and catch

exceptions. • The program on next page is the example program modified

to catch exceptions.

• The constructor, the write() method, and the close() method can throw an IOException. All are caught by the catch block.

• This program opens the file "hello.txt" for appending. Run it twice and see what it does.

Page 10: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

10

IO Exception

import java.io.*;

class AppendTextFile {

public static void main ( String[] args ) {

String fileName = "hello.txt" ;

try {

// append characters to the file

FileWriter outFile = new FileWriter( fileName, true );

outFile.write( "Java Programming is interesting\n" );

outFile.write( "and challenging. Java file is very useful\n" );

outFile.write( "and easy to operate.\n" );

outFile.close();

}

catch ( IOException iox ) {

System.out.println("Problem writing " + fileName );

}

}

}

Page 11: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

11

• Disk input and output is more efficient when a buffer is used.

• Programs that do extensive IO should use buffers. • The BufferedWriter stream is used for this with a

character output stream. – BufferedWriter(Writer out)

Construct a buffered character-output stream

• Since FileWriter is a Writer, it is the correct type for the parameter.

The BufferedWriter Stream

BufferedWriter out

= new BufferedWriter(new FileWriter("a.txt"));

Page 12: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

12

import java.io.*;class BufferedTextFile { public static void main ( String[] args ) { String fileName = "hello.txt" ;

try { BufferedWriter outFile = new BufferedWriter( new FileWriter(fileName) ); outFile.write( "Java Programming is interesting\n" ); outFile.write( "and challenging. Java file is very\n" ); outFile.write( "useful and easy to manage.\n" ); outFile.close(); } catch ( IOException iox ) { System.out.println("Problem writing " + fileName ); } }}

Updated Example

Page 13: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

13

• To read text from text files we can use FileReader and BufferedReader.– BufferedReader in = new BufferedReader( new FileReader(fileName) );

• The readLine() method reads a line of characters from a BufferedReader.

File Input

Page 14: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

14

BufferedReader Example import java.io.*;

class ReadTextFile {

public static void main ( String[] args ) {

String fileName = "hello.txt" ;

String line;

try {

BufferedReader in = new BufferedReader(new FileReader(fileName));

line = in.readLine();

while ( line != null ) { // continue until end of file

System.out.println( line );

line = in.readLine();

}

in.close();

}

catch ( IOException iox ) {

System.out.println("Problem reading " + fileName );

}

}

}

Sample Run

>java ReadTextFileJava Programming is interestingand challenging. Java file is very usefuland easy to operate.

Page 15: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

15

Text File Copy Program

• The following program copies a source text file to a destination text file. An already existing file with the same name as destination file will be destroyed.

import java.io.*;

public class CopyTextFile { public static void main ( String[] args ) { // to avoid using static methods CopyMaker cm = new CopyMaker(); cm.copy("source.txt", "target.txt"); }}

source.txt

Hello John.

I am .......

target.txt

Hello John.

I am .......

java CopyTextFile

Page 16: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

16

Text File Copy Programclass CopyMaker { String sourceName, destName; BufferedReader source; BufferedWriter dest; String line;

public boolean copy(String src, String dst ) { sourceName = src ; destName = dst ; return openFiles() && copyFiles() && closeFiles(); }

return immediately if any of these methods returns false

Page 17: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

17

Text File Copy Program private boolean openFiles() // return true if files open, else false { // open the source try { source = new BufferedReader(new FileReader( sourceName )); } catch ( IOException iox ) { System.out.println("Problem opening " + sourceName ); return false; }

// open the destination try { dest = new BufferedWriter(new FileWriter( destName )); } catch ( IOException iox ) { System.out.println("Problem opening " + destName ); return false; } return true; }

Page 18: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

18

Text File Copy Program private boolean copyFiles() // return true if copy worked,else false { try { line = source.readLine(); while ( line != null ) { dest.write(line); // write the string dest.newLine(); // write a '\n', same as dest.write("\n"); line = source.readLine(); } } catch ( IOException iox ) { System.out.println("Problem reading or writing" ); return false; } return true; }

Page 19: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

19

Text File Copy Program private boolean closeFiles() //return true if files close,else false { boolean retVal=true; // close the source try { source.close(); } catch ( IOException iox ) { System.out.println("Problem closing " + sourceName ); retVal = false; } // close the destination try { dest.close(); } catch ( IOException iox ) { System.out.println("Problem closing " + destName ); retVal = false; } return retVal; }} // end class CopyMaker

Page 20: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

20

Example - Simple Report Generation

1Programming in Java223 83Core Java 1173 54Core Java 2173 37Java Tutorial220 9

Write a program to read transaction records from a text file and generate a report.

1 Programming in Java 223 8 1784

3 Core Java 1 173 5 865

4 Core Java 2 173 3 519

7 Java Tutorial 220 9 1980

Input File (salesinfo.txt)

Output File (report.txt)

First Record1st line : item no2nd line : book name3rd line : price and quantity

Second Record repeat .......

Page 21: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

21Example - Simple Report Generation

import java.io.*;import java.util.*;import javax.swing.*;

public class GenReport { public static void main ( String[] args ) { ReportMaker rm = new ReportMaker();

if (args.length!=2) { System.out.println("Usage: GenReport <sales file> <report file>"); System.exit(-1); } if (rm.process(args[0], args[1])) { System.out.println("Report generation completed."); } else { System.out.println("Report generation failed."); } System.exit(0); }}

Page 22: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

22

Example - Simple Report Generation

class ReportMaker{ String sourceName, destName; BufferedReader source; BufferedWriter dest; String line;

private boolean openFiles() // SAME AS CopyTextFile .......

public boolean process(String src, String dst) { sourceName = src ; destName = dst ; return openFiles() && genReport() && closeFiles(); }

private boolean closeFiles() // SAME AS CopyTextFile .......

Page 23: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

23

Example - Simple Report Generation

private boolean genReport() { int itemID, price, quantity; String name; String spaces = " ";

try { line = source.readLine(); while ( line != null ) { itemID = Integer.parseInt(line);

name = source.readLine(); // make "name" 20 characters long name = name + spaces.substring(0, (20 - name.length()) - 1);

line = source.readLine(); StringTokenizer st = new StringTokenizer(line); price = Integer.parseInt(st.nextToken()); quantity = Integer.parseInt(st.nextToken());

Page 24: 1 Chapter 11 – Files and Streams 1 Introduction What are files? –Long-term storage of large amounts of data –Persistent data exists after termination of

24

Example - Simple Report Generation

dest.write(itemID + " " + name + " " + price + " " + quantity + " " + (price*quantity) ); dest.newLine(); line = source.readLine(); } } catch ( IOException iox ) { System.out.println("Problem reading or writing" ); return false; } return true; }