Pretty handling FileNotFoundException
Your design is slightly off, String args[] works great for terminal programs, but for passing arguments around it's really not efficient. There's no compile time checking to see if you're passing around things that make sense.

Look up Strategy Pattern; You want several independent classes each implementing the interface.

To handle the exception, split your code into two halves:

The first half prepares,

The second half executes.

Additionally, you should split up the responsibility of input source and user input. Right now you'd have to re-implement userInput for each InputMethod, which is unwanted.

By splitting up your code to each case, you'll have 1 specific case where you're still in your calling code (you haven't instantiated an InputMethod yet), but you know that you're going to read from a file. You can handle your exception there.

Your code would be structured like so:

public static void main(String[] args) throws FileNotFoundException {
    IInputMethod input = null;
    if(args.length == 1){
        input = makeFileInputMethod(args);
    } else {
        input = makeStandardInputMethod();
    }

    //make user input object

    while (!input.getUserInput().equals("Exit")) {
        // awesome stuff
    }
    input.closeInput();
}


In the makeFileInputMethod you could handle the exception. Then, in main, you could say "well, if input is still null, we didn't instantiate properly and we ought to shut down".