我有一个名为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");
}
答案 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 */
}
}