ユーザー入力文字列を受け取り、それが有効なファイルであるかどうかを判断するisValidFileというメソッドがあります。メソッドの出力はファイルタイプです。私はコマンドラインで2つのファイル名を取り込み、それらを適切に処理することができます。私はまた有効な1つを無効にすることができます。 isValidFileは妥当性をチェックし、入力されたファイル名が正しくない場合、有効なファイル名をユーザーに提示します。ただし、2つの無効な入力に対しては機能しません。次のように私は、開始、終了、およびファイルを表示するには、テストラインに置く場所あなたが見ることができますJAVA - メソッドは第1呼び出しでは動作しますが、第2呼び出しでは機能しません
public static File isValidFile(String userFile){
System.out.println("START OF isValidFile");
File inFile = new File(userFile);
Scanner in = null;
while(!inFile.exists() || inFile.isDirectory()){
System.out.println("Please enter a valid file name or Q to quit.");
in = new Scanner(System.in);
String validFile = in.nextLine();
System.out.println("IS VALID FILE? " + validFile); // TEST LINE
if(validFile.equalsIgnoreCase("q")){
System.out.println("\nProgram terminated by user.");
in.close();
return null;
} else inFile = new File(validFile);
if (inFile.exists()) in.close();
}
System.out.println("END OF isValidFile\n");
return inFile;
}
...ここ
String[] inLines = commandLine(args);
File reservedWords = isValidFile(inLines[0]);
File toParse = isValidFile(inLines[1]);
は私isValidFile方法です....それらを呼び出します受け入れられた場合は名前が印刷されます。ここに私の出力です。最初の引数のために有効なファイルを入力すると、2番目の引数のファイル名を尋ねますが、何も情報を入力することはできません。 NoSuchElementExceptionがスローされます。なぜメソッドへの最初の呼び出しで、2番目の呼び出しでは機能しませんか? isValidFile
OF
START終了し、有効なファイル名またはQを入力してください。
in.txt
IS VALID FILE? isValidFile
OF isValidFile
START OF
END in.txt終了し、有効なファイル名またはQを入力してください。スレッド "メイン" java.util.NoSuchElementExceptionで
は例外:java.util.Scanner.nextLine(不明なソース)Project6.isValidFileで
(Project6.java:53で
を見つけ ませラインProject6.mainで)
(Project6.java:9)
---線53は線である:文字列validFile = in.nextLine()。
--- 9行目は次の行です。File toParse = isValidFile(inLinse [1]);
内部ではなく、ループの前に 'スキャナ 'を初期化する必要があります。そしてそれを閉じないでください! – Berger
スキャナを閉じないでください。これで 'System.in'が閉じてしまいます...もう入力できません... – Codebender
' commandLine(args) 'メソッドは何ですか? –