Java输入文件验证

时间:2012-07-13 00:31:10

标签: java input try-catch

有没有办法使用try / catch语句要求用户输入文件,如果用户输入错误的文件名,程序会再问两次,然后退出异常?我怎么能循环?因为一旦用户输入了错误的文件名,程序就会立即抛出异常。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main {
    static String[] words = new String[5];
    public static void main(String[] args)
    {
        Scanner kb = new Scanner(System.in);

        System.out.println("enter file name:");
        String fileName = kb.next();

        try {

            File inFile = new File(fileName);
            Scanner in = new Scanner(new File(fileName));

        } catch (FileNotFoundException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }    

    } 

3 个答案:

答案 0 :(得分:2)

所以你不希望它在用户输入错误的文件名时抛出任何错误,对吧?如果是这样,那么我认为这就是你想要的:

for(int i = 0; i < 3; i++){
        try {
            File inFile = new File(fileName);
            Scanner in = new Scanner(new File(fileName));
            break;
        } catch (FileNotFoundException ex) {
            if(i == 2){
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                System.exit(0);
            }
            else
                continue;
        }
    }

如果用户输入正确的文件名,它将跳出循环。如果没有,它会检查循环是否在它的第三次迭代。如果是,(这意味着用户尝试过两次失败),它会输出错误并退出程序。如果循环没有进行第三次迭代,它将继续循环并重新提示用户。

答案 1 :(得分:0)

假设您创建了一个boolean fileIsLoaded = false,并将其设置为true。你可以创建一个循环

for(int i=0;i<2 && !fileIsLoaded; i++) {
//your try/catch goes here
} 

将当前main中的所有代码包含在该循环中(预先创建布尔值)。最后,如果所有尝试都失败,您可以检查布尔值。

答案 2 :(得分:0)

我希望扫描器构造函数抛出FileNotFoundException是显而易见的。那么为什么要使用它直到你确定该文件存在?在获得正确的文件之前,不应创建Scanner对象! 要实现这个想法,请在try块中使用它:

//read file name from stdio
File inFile = new File(fileName);
int i = 0;
while(!inFile.exists() && i++ < 2 ){
        //read file name from System.in;
        inFile = new File(fileName);
}
Scanner in = new Scanner(new File(fileName));