BufferedWriter

Entao pessoal, eu to com um problema aqui… Eu quero fazer uma espécie de ranking em que só os 10 melhores jogadores podem aparecer.

Eu acho que fiz tudo certo só que ao invés de substituir o conteúdo do arquivo, o BufferedWriter adiciona 10 linhas a mais e ferra tudo.
Eu tenho quase certeza que é alguma coisa besta que eu não conssegui perceber.

Aqui vai o código da classe para voces darem uma olhada:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.logging.Level;
import java.util.logging.Logger;


public class Rank {

		
	String arquivo = "Rank.txt";
	String[] jogadores = new String[11];
	int[] pontuacoes = new int[11];
	
	Rank(){
		GetRank(arquivo);
		AddRank("NewGuy", 9, arquivo);
	}
	
	
	public void GetRank(String arq){
	try{
		BufferedReader reader = new BufferedReader(new FileReader(arq));
		String linha = "|";
			
		for(int i = 1; i < jogadores.length; i++){
			if((linha = reader.readLine()) != null && linha != ""){
				int aux = linha.indexOf("|");
			jogadores[i] = linha.substring(0,aux);
			System.out.println("Jogadores: "+jogadores[i]);
			pontuacoes[i] = Integer.parseInt(linha.substring(aux+1));
			System.out.println("Pontuações: "+pontuacoes[i]);
			}//if linha
		}//for
		reader.close();
	}catch(Exception e){
		Logger.getLogger(Rank.class.getName()).log(Level.SEVERE, null, e);
	}
	}
	
	//##########################################################################################
	
	public void AddRank(String jogador, int pontos, String arq){
		try{
				
		jogadores[0] = jogador;
		pontuacoes[0] = pontos;

		for(int i = 0; i < pontuacoes.length; i++)
			for(int j = 0; j < pontuacoes.length; j++){					
				if(pontuacoes[i] > pontuacoes[j]){
					int num = pontuacoes[i];
					pontuacoes[i] = pontuacoes[j];
					pontuacoes[j] = num;
					
					String txt = jogadores[i];
					jogadores[i] = jogadores[j];
					jogadores[j] = txt;
				}//ordenacao
			
		}//for
		
		
		System.out.println("\n\n");
		for(int i = 1; i < pontuacoes.length; i++){
			System.out.println("Jogadores: "+jogadores[i]);
			System.out.println("Pontuações: "+pontuacoes[i]);	
		}
		BufferedWriter writer = new BufferedWriter(new FileWriter(arq,true));
		
		for(int i = 0; i < pontuacoes.length; i++){
			writer.write("\r"+jogadores[i]+"|"+pontuacoes[i]+"\r\n");			
		}
		
		writer.flush();
		writer.close();
		
		}catch(Exception e){
			Logger.getLogger(Rank.class.getName()).log(Level.SEVERE, null, e);
		}
	}
	
	
	
	public static void main(String[] args){
		Rank rank = new Rank();
	}
	
	
}

Olá AFelps!

Olha lá na linha 70:

BufferedWriter writer = new BufferedWriter(new FileWriter(arq,true));

muda o segundo parametro passado para FileWriter para false, assim:

BufferedWriter writer = new BufferedWriter(new FileWriter(arq,false));

se voce passa true, então vc ta dizendo que é para adicionar a sua gravação ao final do arquivo, se passa false, ele sobrescreve :smiley:

da uma lida na documentação dessa classe:
http://docs.oracle.com/javase/1.4.2/docs/api/java/io/FileWriter.html#FileWriter(java.lang.String, boolean)

1 curtida

Putz cara, pior que era isso mesmo, eu não acredito que eu não percebi :shock:

Valeu ae :wink: