説明するよりも、コードと出力を表示する方が簡単だと思います:)
これは私の主な方法からのものです:
//prompt user for filename
System.out.println("Please enter the text file name. (Example: file.txt):");
String filename = ""; //will be used to hold filename
//loop until user enters valid file name
valid = false;
while(!valid)
{
filename = in.next();
try
{
reader.checkIfValid(filename);
valid = true; //file exists and contains text
}
catch (Exception e)
{
System.out.println(e + "\nPlease try again.");
}
}
そして、これは reader.checkIfValid メソッドです:
public void checkIfValid(String filename) throws InvalidFileException, FileNotFoundException
{
try
{
in = new Scanner(new File(filename));
if (!in.hasNextLine()) // can't read first line
throw new InvalidFileException("File contains no readable text.");
}
finally
{
in.close();
}
}
これは、存在しないファイルが入力されたときに得られる出力です。
テキストファイル名を入力してください。(例: file.txt):
doesNotExist.txt
java.lang.NullPointerException
もう一度やり直してください。
System.out.println(e) が NullPointerException を取得するのはなぜですか? 空のファイルまたはテキストを含むファイルを入力すると、問題なく動作します。空のファイルには、InvalidFileException (カスタム例外) メッセージが出力されます。
"in = new Scanner(new File(filename));" の周りに try-catch ステートメントを配置し、catch ブロックに例外を表示させると、 FileNotFoundException が出力され、その後に NullPointerException (I'm例外が checkIfValid メソッドで既にキャッチされている場合に、メイン メソッドの catch ブロックがアクティブになる理由が完全にはわかりません...)。
私はこれにしばらく費やしましたが、何が問題なのか完全にわかりません。どんな助けでも大歓迎です。ありがとう!