2017-11-06 4 views
-1

を再入力するようユーザに要求して、ユーザーが指定したファイルを読み込み、現在のコード私のようなルックスを持っています私はプログラムをコード内に戻したい、私は現在ループを作成しようとしていますが、それでも私はループ内で試してみましょう。また、私は新しいボイドを作成しようとしましたが、それはまだ動作しません。現在、ユーザーが無効なファイル名を入力してもプログラムは実行され続けますので、助けてください。が例外をキャッチし、入力私は開くプログラムを作成してい

ありがとう、 Rob。

EDIT: あなたは、私はすでに答えを検索しましたし、これだけは私が欲しいものに関連見つけることができます尋ねる前に:Java - Exception handling - How to re-enter invalid input

はまた、私はループで試して置くことによって何を意味するのか明確に、はい、それは可能ですしかし、私ははい、私が言及している、試し内部ループやループ内のtryを入れてください、私のプログラムで作業を続けるためにかどうかを知りたい:Should try...catch go inside or outside a loop?

This is the error I'm currently getting with my latest code

+2

:(それは間違ってそれを入力して、ユーザによってタイプ入力されていたように)考慮に存在しないファイルの正常な動作を取ると、あなたのようなものを使用することができますループの中で " - 説明してください。 – khelwood

+0

コメントをコメントとして投稿しないでください。代わりにあなたの質問を[編集]してください。 –

+0

例外をキャッチしてループの先頭に戻る場合、 'try/catch'はループ内にある必要があります。 – khelwood

答えて

0

予期せぬものを処理するために、使用することを意図している意味でExceptionを使用すると少し簡単になります。存在しないファイルは、実際には例外ではありません。既存のファイルではあるが開かれていないか、開かれているがコンテンツが1MBのコンテンツであってもコンテンツがゼロであるということは予期せぬことである。 「それは私が試して置くせません

boolean fileExists = false; 
File newFile; 
while(!fileExists) { 
    System.out.println("Enter the name of the file you want to open: "); 
    FileN = scan.nextLine(); 
    newFile = new File(FileN); 
    fileExists = newFile.exists(); 
    if (!fileExists) { 
    System.out.println(FileN + " not found..."); 
    } 
} 
try { 
    Scanner scan; 
    scan = new Scanner(newFile); 
    ... do stuff with the scanner 
} 
catch(FileNotFoundException fnfe) { 
    System.out.println("sorry but the file doesn't seem to exist"); 
} 
+0

現在、コード内にエラーが表示されているため、FileNotFoundExceptionをキャッチする方法はありますか。 FileNotFoundExceptionをスローすると、プログラムは動作しますが、ファイルが見つからない、またはエラーが発生したことをユーザーに通知しません。ユーザーが入力を要求し続けるだけです。 – rxbert

+0

exists()がスローしないため、FileNotFoundExceptionはありません。ファイルが存在しないことを伝えるメッセージをユーザーに表示するようにコードを更新しました。スキャナーに達する前に、スローまたはキャッチされる例外は必要ありません。 – codebrane

+0

イメージをチェックしてください私は私の質問に含まれています。 – rxbert

-1

あなたが試すことができますwhileループ:

 boolean again =true; 

    while(again){ 
    FileN = scan.nextLine(); 

      try 
      { 
       scan = new Scanner(new File (FileN)); 
       again=false; 
      } 
      catch(Exception e) 
      { 
       System.out.println("Could not find file" + e); 
       System.out.println("Please enter a valid file name: "); 

      }} 
+0

入力を 'again'に入れる必要があります。それ以外の場合は一度ループします – Lino

1

問題は、操作の順序が悪いことです。

  • プロセスファイル
  • ファイルが

が、私はこのアプローチをお勧め新しいファイル名を尋ね存在しないエラー与える:

をここにあなたのためであります
  • ファイル名を入力してください:
  • ファイルが存在するか確認してください。
  • それが存在しない場合は
  • 、一言で言えば再び
  • プロセスファイル

を尋ねる、私のアプローチは次のとおりです。

  • は、いくつかの入力
  • 検証入力を読みます。真File.exists()戻るまでのファイル名を要求するループを作成します。それは悪い場合は、いくつかのエラーが入力さらに

があなたの問題に戻って来る

  • プロセスを処理します。たぶんFile.isFile()もチェックしているので(人がディレクトリに入ることはできません)

    ループの後でのみスキャナを作成します。それでも例外はスローされます(Javaはあなたがすでにファイルが存在することを確認したことを知らない)。しかし、例外ハンドラのコードはファイル名を要求する必要はありません(ループはありません)。

  • +0

    正確に。例外は*例外的な条件です。無効なファイルを入力したユーザーは例外ではありません。 – Michael

    +0

    私は現在、私がFileNotFoundExceptionを捕まえることを許可しないと言われているように、私の操作順序を再注文しているので、ユーザーが入力を要求し続けるだけです。 – rxbert

    +0

    詳細を詳しく説明するか、例外をキャッチできない理由を詳細に説明してください。 –

    関連する問題