//Doubler.java

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.FileNotFoundException;
import java.io.EOFException;
import java.io.IOException;
import java.util.Scanner;

/**
Doubles the integers in one file and puts them in another file.
*/
public class Doubler
{
    private ObjectInputStream inputStream = null;
    private ObjectOutputStream outputStream = null;

    public static void main(String[] args)
    {
        Doubler twoTimer = new Doubler();
        twoTimer.connectToInputFile();
        twoTimer.connectToOutputFile();
        twoTimer.timesTwo(); 
        twoTimer.closeFiles();
        System.out.println("\nAll numbers from the input file have been");
        System.out.println("doubled and copied to the output file.");
    }

    public void connectToInputFile()
    {
        String inputFileName = getFileName("\nEnter 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.print(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);
        }
    }
}		

