Ashley
Ashley

Reputation: 55

How do I call method if exception thrown?

I have a method called readinFile and if the user enters a wrong file instead of exiting I wanted to call the method readinFile again inside the readinFile method I ask the user for new filename. The problem I am running into is the first time it goes through it and gives the exception file not found than it goes through the catch(). I want it to call the method and not run the last inputStream.

try 
{
    inputStream = new Scanner(new FileInputStream(fileName));
}
catch(FileNotFoundException E)
{
    readinfile(table, numberOfColumns, header,
               original, sntypes,displaySize, 
               writeOut,inputStream,fileName );
    System.out.print("It got here after doing the method call");        
}

Upvotes: 0

Views: 1505

Answers (5)

TofuBeer
TofuBeer

Reputation: 61526

To get what you are after, without the chance of the file being deleted after you check for it existing but before you open it do something like:

boolean done = false;
String fileName = fileNameParameter;

while(!done)
{
    try 
    {
        inputStream = new Scanner(new FileInputStream(fileName));
        done = true;
    }
    catch(FileNotFoundException E)
    {
        fileName = /* ask the user for the file name */
    }
}

Upvotes: 0

luketorjussen
luketorjussen

Reputation: 3264

You probably want to do something like this:

String fileName;

do {
    System.out.println("Please enter filename");
    fileName = getFileNameFromInput();
    File file = new File(fileName);
} while (!file.exists());

readFile(file);

EDIT:

As Bruno Reis has pointed out, this will only check if the file exists when the user specified the file name. If the file was to be moved/deleted between specifying the file name and reading it then a FileNotFoundException would still be thrown. To reduce the risk of this you can lock the file as discussed in this question.

Upvotes: 2

Kit Ho
Kit Ho

Reputation: 26968

You can check if the filename the user input does exists or not, and don't need to catch the exception. (which is not a good design code, decrease the readability of the code)....

as inflagranti said,

you can do this pseudocode

if (!new File(filename).exists()){
    //read your other file from user
    readinfile(....)

}

Upvotes: 0

Matten
Matten

Reputation: 17631

bool invalidFilename = true;
string fileName;

while(invalidFilename)
{
    readinfile(...);   
    invalidFilename = !new File(fileName).exists();
}

inputStream = new Scanner(new FileInputStream(fileName));

Upvotes: 0

Janick Bernet
Janick Bernet

Reputation: 21184

You should generally not use exceptions for branching. Just check for the existance of the file using File.exists, like so:

new File(fileName).exists()

Upvotes: 2

Related Questions