2017-05-24 15 views
1

私はまだプログラミングとこのサイトで初めてです。 私は楽しみのためだけに自分のブラウザを作ろうとしていましたが、データを保存するためにログとして使用するテキストファイルからの読み書き方法を学んでいます。異なるWebサイトをログに保存できるようにお気に入りシステムを作成しようとしていますが、なぜコードの一部が機能していないのかわかりません。私は周りを見回しているウェブで約2時間半を費やしましたが、何の問題も見られません。ファイルへの書き込みに関する問題JavaFx

try(BufferedReader format1 = new BufferedReader(new 
             FileReader("favorites.txt"))) { 

      String line = format1.readLine(); //Used to look through file 
      String found = ""; //Stores the address that was the same 

      //Loop searches file, I only plan to have a max of 20 favorites 
      for (int counter = 0; counter < 20; counter++) { 

       System.out.println(line); //Just used so I can make sure the 
              loop works 

       if(line.equals(input)) { 
        counter = 20; 
        found = line; 
       } 

       line = format1.readLine(); 
      } 
      format1.close(); 

      if(!(found.equals(input))) { 
       BufferedWriter format2 = new BufferedWriter(new 
             FileWriter("favorites.txt", true)); 
       format2.write(input); 
       format2.newLine(); 

       format2.close(); 


      }   
    } catch (IOException e1) { 
     System.out.println("ERROR! Favorite not Added."); 
    } 

問題がどこにあるのかを確認しました。ファイルに実際に書き込むifステートメントは、問題がどこにあるかを確認しました。私は何百万回も見ましたが、私は何も見ることができません。たぶん、経験豊富なプログラマーが私の問題を見ることができたでしょうか?このコードセクションを実行するたびに、大量のエラーメッセージが吐き出されます。私は助けていただきありがとうございます!

+0

"これは、大量のエラーメッセージを吐き出します"。エラーメッセージには何が表示されましたか?あなたはそれらを[問題が何であるかを理解する](https://stackoverflow.com/q/3988788/2775450)に読むことになっています。その投稿を読んだ後にスタックトレースを調べても問題を把握できない場合は、スタックトレースを質問に投稿して、コード内のどの行が例外をスローしているかを表示します。 –

+0

@James_D私は、私が比較的新しいので、私は彼らが何を意味するかあまりにも分かっていませんでした。アプリケーションの例外が多くありました。奇妙な部分は、私はforループをコメントアウトするとき、それは正常に動作します。何が起こっているか分からない。 –

+0

だからこそ私は、スタックトレースを読む方法を説明した記事をリンクしました。 –

答えて

2

私はあなたの問題がこの奇妙な "max 20 favorites"ループに由来していると思われます。このループは、ファイルに含まれているかどうかにかかわらず20行を読み込もうとします(最終結果はNullPointerExceptionに20行未満です。 20行以上は無視する)。いくつかの行を読むだけで物事を単純化しようとしたので、読むことのできる数を決める必要はありませんが、その過程で物事はもっと複雑になりました!

Javaでラインでファイル全体のラインを読み取るための合理的に共通のイディオムがあります - これで(イテレータとしてcounterと1)のループのためにあなたを交換してください:

String line; 
while((line=format1.readLine())!=null) { 
    System.out.println(line); //Just used so I can make sure the 
    if (line.equals(input)) { 
     found = line; 
     break; 
    } 
} 
format1.close(); 

これは、それぞれの行を読み込みますファイルをlineに、返された値をreadLine()からnullに変更します。これはファイルの最後に当たるときになります。

+1

それを修正しました!本当にありがとう。あなたは私がそれを単純化しようとしたことは間違いありません。それは悪い動きだったことがわかりました。私は次回のために何をすべきか知っています。 –

関連する問題