import java.io.*;

public class CopyFileTooMuchExceptions{ 

    //    programma che copia il file "inp.txt" nel file "out.txt"
    //    esempio di accurata (ma eccessiva) gestione delle eccezioni
    
    public static void main(String[] args) {
        String inputFileName = "./inp.txt";
        String outFileName   = "./out.txt";
               
        // bisogna dichiarare le variabili fuori dal blocco
        // try perche' altrimenti non sarebbero visibili
        // negli altri blocchi 
        PrintWriter out =  null;
        BufferedReader in = null;
            
        try {
            in = new BufferedReader(new FileReader(inputFileName));
        } catch(FileNotFoundException e) {
            in=null;
            System.out.println(inputFileName+" FileNotFound");
            }          


        try {
            out = new PrintWriter(new BufferedWriter(new FileWriter(outFileName)));                
            } catch(IOException e) {
            out=null;
            System.out.println(" IOException  "+e);
            }

        // procediamo solo se i file sono stati aperti correttamente
        if (in != null && out !=null) {
            String line = null;
            
            try {        
                line = in.readLine();
                while(line!=null){
                    out.println(line);
                    line = in.readLine();
                }
            } catch(IOException e) {
                System.out.println(" IOException  "+e);
            }
            
            
            try {
                in.close();
                out.close();
            } catch(IOException e) {
                System.out.println(" IOException  "+e);
            }
        }
        System.out.println(" Fine Esecuzione  ");
    }
}