Как вызвать метод, если выброшено исключение? - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть метод readinFile, и если пользователь вводит неправильный файл вместо выхода, я хочу снова вызвать метод readinFile внутри метода readinFile, и я спрашиваю у пользователя новое имя файла.Проблема, с которой я сталкиваюсь, заключается в том, что в первый раз она проходит через нее и выдает файл исключений, который не найден, а затем проходит через catch ().Я хочу, чтобы он вызывал метод, а не запускал последний 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");        
}

Ответы [ 5 ]

2 голосов
/ 05 сентября 2011

Вы, вероятно, хотите сделать что-то вроде этого:

String fileName;

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

readFile(file);

EDIT:

Как указал Бруно Рейс, он будет проверять, существует ли файл только тогда, когда пользователь указал имя файла. Если файл должен быть перемещен / удален между указанием имени файла и его чтением, то исключение FileNotFoundException все равно будет выдано. Чтобы уменьшить риск этого, вы можете заблокировать файл, как описано в этот вопрос .

2 голосов
/ 05 сентября 2011

Обычно вы не должны использовать исключения для ветвления.Просто проверьте наличие файла с помощью File.exists, например:

new File(fileName).exists()
0 голосов
/ 05 сентября 2011

Чтобы получить то, что вам нужно, без возможности удаления файла после того, как вы проверите его на наличие, но перед тем, как открыть его, сделайте что-то вроде:

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 */
    }
}
0 голосов
/ 05 сентября 2011

Вы можете проверить, существует ли имя файла, введенное пользователем, или нет, и не нужно перехватывать исключение.(это не очень хороший код разработки, уменьшите читабельность кода) ....

, как сказал inflagranti,

вы можете сделать этот псевдокод

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

}
0 голосов
/ 05 сентября 2011
bool invalidFilename = true;
string fileName;

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

inputStream = new Scanner(new FileInputStream(fileName));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...