-1

try / catchステートメントを使用してユーザーにファイルの入力を求める方法はありますか?ユーザーが間違ったファイル名を入力した場合、プログラムはさらに2回要求し、例外を除いて終了しますか?どうすればループできますか?ユーザーが間違ったファイル名を入力すると、プログラムはすぐに例外をスローするためです。

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);
        }    

    } 
4

3 に答える 3

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;
        }
    }

ユーザーが正しいファイル名を入力すると、ループから抜け出します。そうでない場合は、ループが3回目の反復であるかどうかを確認します。そうである場合(つまり、ユーザーが2回試行して失敗したことを意味します)、エラーを出力してプログラムを終了します。ループが3回目の反復で行われていない場合は、ループを続行し、ユーザーに再度プロンプトを表示します。

于 2012-07-13T00:42:54.840 に答える
0

ブールファイルIsLoaded=falseを作成し、それをtrueに設定すると仮定します。ループを作成できます

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

そのループ内の現在のメイン内のすべてのコードを囲みます(事前に作成されたブール値を使用)。最後に、すべての試行が失敗した場合に備えて、後でブール値を確認できます。

于 2012-07-13T00:37:36.613 に答える
0

FileNotFoundExceptionがScannerコンストラクターによってスローされることは明らかだと思います。では、ファイルが存在することが確実になるまで、なぜそれを使用するのでしょうか。正しいファイルを取得するまで、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));
于 2012-07-13T00:42:34.253 に答える