Next: None. Up: Files. Previous: The FileInputStream class.
Let's look at a program that illustrates these three classes at work. This program copies one file into another location. You would invoke it via the command line; for example, if you wanted to copy the file ``CopyFile.java'' into a file named ``CopyFile.bak'', you would type the following at the Unix prompt.
% java CopyFile CopyFile.java CopyFile.bak
1 import java.io.*; 2 public class CopyFile { 3 public static void main(String[] args) { 4 if(args.length != 2) { 5 System.out.println("usage: java CopyFile source dest"); 6 return; 7 } 8 File src_f = new File(args[0]); 9 File dst_f = new File(args[1]); 10 if(!src_f.exists() || !src_f.canRead()) { 11 System.out.println("cannot find source: " + src_f.getName()); 12 return; 13 } else if(dst_f.exists()) { 14 System.out.println("destination file " + dst_f.getName() 15 + " already exists"); 16 return; 17 } 18 try { 19 FileInputStream src = new FileInputStream(src_f); 20 FileOutputStream dst = new FileOutputStream(dst_f); 21 byte[] buffer = new byte[512]; 22 while(true) { 23 int count = src.read(buffer); 24 if(count == -1) break; 25 dst.write(buffer, 0, count); 26 } 27 src.close(); 28 dst.close(); 29 } catch(IOException e) { 30 System.out.println("Error during copy: " + e.getMessage()); 31 if(dst_f.exists()) dst_f.delete(); 32 } 33 } 34 }
One non-obvious thing about this program is the try block: We know the FileInputStream and FileOutputStream constructor methods throw a FileNotFoundException, and yet the only exception we catch is an IOException object. The reason we could get away with this is that FileNotFoundException is a subclass of IOException, so that, if the constructor invoked in line 19 throws a FileNotFoundException, the catch clause of line 29 would still catch it, since the exception is also an IOException.
Next: None. Up: Files. Previous: The FileInputStream class.