Create a MergeFiles application that merges the integers ord
Create a MergeFiles application that merges the integers ordered from low to high in two text data files into a third text data file, maintaining the order from low to high (no post merge sorts!). For example, the two files of integers could contain:
File 1: 12 23 34 45 56 67 69 123 133
File 2: 4 5 10 20 35 44 100 130 150 160 180
The application should not use an array or ArrayList to temporarily store the numbers, but should merge the two files taking one element at a time from each. After MergeFiles runs for this example, the third file should contain:
4 5 10 12 20 23 34 35 44 45 56 67 69 100 123 130 133 150 160 180
Create the two input files using a text editor with the numbers of your choice. Be sure to employ proper exception handling for the file I/O. Use at least one try-catch statement that properly handles exceptions.
Solution
import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.util.Scanner;
 public class MergeFiles {
   public static void main(String[] args) throws IOException
    {
        Scanner sc1 = null;
        try {
            sc1 = new Scanner(new FileReader(\"file1.txt\"));
        } catch (FileNotFoundException e) {
            System.out.println(\"No file1.txt found.\");
        }
       
        Scanner sc2 = null;
        try {
            sc2 = new Scanner(new FileReader(\"file2.txt\"));
        } catch (FileNotFoundException e) {
            System.out.println(\"No file2.txt found.\");
        }
       
        FileWriter writer = null;
        try {
            writer = new FileWriter(\"output.txt\");
        } catch (IOException e) {
            System.out.println(\"Unable to create file. Exiting.\");
            return;
        }
       
        if (sc1 == null && sc2 == null)
        {
            return;
        }
       
        if (sc1 != null && sc2 == null)
        {
            while(sc1.hasNextInt())
            {
                writer.write(sc1.nextInt()+ \" \");
            }
            sc1.close();
            writer.close();
            return;
        }
       
        if (sc2 != null && sc1 == null)
        {
            while(sc2.hasNextInt())
            {
                writer.write(sc2.nextInt()+ \" \");
            }
            sc1.close();
            writer.close();
            return;
        }
       
        int first = 0;
        int second = 0;
        boolean shouldFirst = true;
        boolean shouldsecond = true;
        while(sc1.hasNextInt() && sc2.hasNextInt())
        {
            if (shouldFirst)
                first = sc1.nextInt();
            if (shouldsecond)
                second = sc2.nextInt();
            if (first < second)
            {
                writer.write(first + \" \");
                shouldFirst = true;
                shouldsecond = false;
            }
            else
            {
                writer.write(second + \" \");
                shouldFirst = false;
                shouldsecond = true;
            }
        }
       
        while(sc1.hasNextInt())
        {
            writer.write(sc1.nextInt() + \" \");
        }
       
        while(sc2.hasNextInt())
        {
            writer.write(sc2.nextInt() + \" \");
        }
        writer.close();
    }
 }


