2016-06-12 16 views
-1

私はユーザーのスコアを変更したいが、新しいスコアでファイルを上書きするのではなく、単に空のファイルを作成する。 行は次のように書かれている: "ユーザ名・パスワード-WINS-損失-絆"PrintWriterは空白のファイルを書き込みます

try { 
     BufferedReader br = new BufferedReader(new FileReader("users.txt")); 
     PrintWriter pw = new PrintWriter(new FileWriter("users.txt")); 
     String[] tab = null; 
     String zlepek = ""; 
     while(br.readLine()!=null) { 
      String line = br.readLine(); 
      tab = line.split("-"); 
      int countLoss = Integer.parseInt(tab[3]+plusLoss); 
      int countWin = Integer.parseInt(tab[2]+plusWin); 
      int countTie = Integer.parseInt(tab[4]+plusTie); 
      if(tab[0].equals(loginUser.user)) { 
       String newScore = (tab[0] + "-" + tab[1] + "-" + countWin + "-" + countLoss + "-" + countTie + "\n"); 
       zlepek = zlepek+newScore; 
      } else { 
       String oldScore = (tab[0] + "-" + tab[1] + "-" + tab[2] + "-" + tab[3] + "-" + tab[4] + "\n"); 
       zlepek = zlepek+oldScore; 
      } 
     } 
     pw.print(zlepek); 
     pw.close(); 
     br.close(); 

     plusWin = 0; 
     plusLoss = 0; 
     plusTie = 0; 

    } catch(IOException e) {} 

すべてのヘルプは高く評価されています。

答えて

0

を定義し、

String line = null; 
    while ((line = br.readLine()) != null){ 
      // code 
    } 

以下のようなコードを変更するにも、あなたが読んで同じファイルに書き込みをしている、あなたは読み取りおよび書き込みができません同時に同じファイルに保存されます。必要に応じて、一時ファイルに書き込んで後で名前を変更することができます。

あなたが書く前に、読者を閉じる必要があり、同じファイルに書き込み、

 BufferedReader br = new BufferedReader(new FileReader("users.txt")); 
     String line = null; 
     StringBuilder sb = new StringBuilder(); 
     String zlepek = ""; 

     while ((line = br.readLine()) != null) { 
      zlepek = // logic to get value 
      sb.append(zlepek).append("\n"); 
     } 
     br.close(); 

     PrintWriter pw = new PrintWriter(new FileWriter("users.txt")); // pass true to append 
     pw.print(sb); 
     pw.close(); 
+0

下記参照したい場合、私はあなたと私のコードを置き換えますが、私が書くの後にファイルがまだ空でありますそれ。 – n3onis

+0

答えが更新されました。入力ファイルにテキストがありますか? – Saravana

+0

まず、ユーザーを登録して「users.txt」ファイルに保存します。この行は "username-password-wins-losses-ties"(user-pass-0-0-0)のようになります。それから私はゲームをして、このコードは変更された行と変更されていない行をすべて "zlepek"文字列に入れるべきです。最後に、 "zlepek"文字列にあるものをファイルに貼り付けて、既存のテキストを上書きする必要があります。代わりに、すべてが空のファイルで置き換えられます。 – n3onis

0

問題はこの行にあります。while(br.readLine()!=null)は、行を読み込んだのに保存しませんでした。その行がどこにあるのか分からず、行を読み込んだ後に行が空になることはありません。

String line = br.readLine();を削除してみてください。あなたが最初の行とすべての奇数ラインを飛ばしているString line;while((line = br.readLine()) != null){ // do something}

0
try { 
     String[] tab = null; 
     String line = null; 
     tab = line.split("-"); 
     int countLoss = Integer.parseInt(tab[3]+plusLoss); 
     int countWin = Integer.parseInt(tab[2]+plusWin); 
     int countTie = Integer.parseInt(tab[4]+plusTie); 

     BufferedReader br = new BufferedReader(new FileReader("users.txt")); 
     StringBuilder sb = new StringBuilder(); 
     String zlepek = ""; 

     while ((line = br.readLine()) != null) { 
      if(tab[0].equals(loginUser.user)) { 
       String newScore = (tab[0] + "-" + tab[1] + "-" + countWin + "-" + countLoss + "-" + countTie + "\n"); 
       zlepek = zlepek+newScore; 
       } else { 
        String oldScore = (tab[0] + "-" + tab[1] + "-" + tab[2] + "-" + tab[3] + "-" + tab[4] + "\n"); 
        zlepek = zlepek+oldScore; 
       } 
      sb.append(zlepek).append("\n"); 
     } 
     br.close(); 

     PrintWriter pw = new PrintWriter(new FileWriter("users.txt")); // pass true to append 
     pw.print(sb); 
     pw.close(); 

     plusWin = 0; 
     plusLoss = 0; 
     plusTie = 0; 

    } catch(IOException e) {} 
} 
関連する問題