import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.EOFException;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
public class Doubler
{
    private ObjectInputStream inputStream = null;
    private ObjectOutputStream outputStream = null;
    /**
     Doubles the integers in one file and puts them in another file.
    */
    public static void main(String[] args)
    {
        Doubler twoTimer = new Doubler( );
        twoTimer.connectToInputFile( );
        twoTimer.connectToOutputFile( );
        twoTimer.timesTwo( ); 
        twoTimer.closeFiles( );
        System.out.println("Numbers from input file");
        System.out.println("doubled and copied to output file.");
    }

    public void connectToInputFile( )
    {
        String inputFileName = 
                        getFileName("Enter name of input file:");
        try
        {
            inputStream = new ObjectInputStream(
                              new FileInputStream(inputFileName));
        }
        catch(FileNotFoundException e)
        {
            System.out.println("File " + inputFileName +
                               " not found.");
            System.exit(0);
        }
        catch(IOException e)
        {
            System.out.println("Error opening input file " +
                                inputFileName);
            System.exit(0);
        }
    }

    private String getFileName(String prompt)
    {
        String fileName = null;
        System.out.println(prompt);
        Scanner keyboard = new Scanner(System.in);
        fileName = keyboard.next( );
        return fileName; 
    }

    public void connectToOutputFile( )
    {
        String outputFileName = 
                         getFileName("Enter name of output file:");
        try
        {
            outputStream = new ObjectOutputStream(
                        new FileOutputStream(outputFileName));
        }
        catch(IOException e)
        {
            System.out.println("Error opening output file " +
                                outputFileName);
            System.out.println(e.getMessage( ));
            System.exit(0);
        }
    }

    public void timesTwo( )
    {
        try
        {
            while (true)
            {
                int next = inputStream.readInt( );
                outputStream.writeInt(2 * next);
            }
        }
        catch(EOFException e)
        {
            //Do nothing. This just ends the loop.
        }
        catch(IOException e)
        {
            System.out.println(
                            "Error: reading or writing files.");
            System.out.println(e.getMessage( ));
            System.exit(0);
        }
    }

    public void closeFiles( )
    {
        try
        {
            inputStream.close( );
            outputStream.close( );
        }
        catch(IOException e)
        {
            System.out.println("Error closing files " +
                                e.getMessage( ));
            System.exit(0);
        }
    }
}		