如果抛出异常,我该如何调用方法?

时间:2011-09-05 17:29:07

标签: java file-io

我有一个名为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 个答案:

答案 0 :(得分:2)

通常不应该使用异常进行分支。只需使用File.exists检查文件是否存在,如下所示:

new File(fileName).exists()

答案 1 :(得分:2)

你可能想做这样的事情:

String fileName;

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

readFile(file);

编辑:

正如Bruno Reis所指出的,这只会在用户指定文件名时检查文件是否存在。如果要在指定文件名和读取文件名之间移动/删除文件,则仍会抛出FileNotFoundException。 为降低此风险,您可以按this question

中的说明锁定文件

答案 2 :(得分:0)

bool invalidFilename = true;
string fileName;

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

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

答案 3 :(得分:0)

您可以检查用户输入的文件名是否存在,并且不需要捕获异常。 (这不是一个好的设计代码,降低了代码的可读性)....

正如inflagranti所说,

你可以做这个伪代码

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

}

答案 4 :(得分:0)

要获得您所追求的内容,在您检查文件之后,但在打开文件之前没有删除该文件的可能性,请执行以下操作:

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 */
    }
}