import java.io.*;

public class CopyFileGoodSafeExceptions { 
    
    public static void main(String[] args) {
        
        //    programma che copia il file "inp.txt" nel file "out.txt"
        //    esempio di buona gestione delle eccezioni
        
        String inputFileName = "./inp.txt";
        String outFileName   = "./out.txt";
               
        // bisogna dichiarare la variabile fuori dal blocco
        // try perche' altrimenti non sarebbe visibile
        // nel blocco finally 
        PrintWriter out = null;

        try {
            BufferedReader in = 
                new BufferedReader(new FileReader(inputFileName));

            out = 
                new PrintWriter(new BufferedWriter(new FileWriter(outFileName)));
            
            String line = in.readLine();
            while(line!=null){
                out.println(line);
                line = in.readLine();
            }

            in.close();
            
        } catch(FileNotFoundException e) {
            System.out.println(inputFileName+" FileNotFound");
        } catch(IOException e) {
            System.out.println(" IOException  "+e);
        } finally {
            // si cerca di chiudere comunque il file di output
            if (out!=null) out.close();
        }

        System.out.println(" Fine Esecuzione  ");
    }
}