2016-06-12 2 views
-1

Я хочу изменить оценку пользователя, но вместо того, чтобы переписывать файл с новыми оценками, он просто делает пустой файл. Строки записываются следующим образом: «имя-пароль-выиг-лоссы-связи»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-loss-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) {} 
}