Dúvida em File

1 resposta
R

Galera, tá rolando algo mto esquisito no meu código... vejam soh... Esse código gera um arquivo ok?

public void criarConta(String login, String senha, String nome_exibicao, String email, String sexo, String dataNasc, String endereco, 
			String interesses, String quem_sou_eu, String filmes, String musicas, String livros) throws Exception {
		
		Usuario pessoa = new Pessoa(login,senha,nome_exibicao,email,sexo,dataNasc,endereco,interesses,quem_sou_eu,filmes,musicas,livros);
		File file = new File("usuarios.xml");
		if (!file.exists()) {
			file.createNewFile();
		}

		else {
			load();
			for (int i=0;i<usuarios.size();i++) {
				if (loginExistente(usuarios.get(i),login)) throw new Exception("Login existente");
				if (emailExistente(usuarios.get(i),email)) throw new Exception("Email existente");
			}			
		}

		usuarios.add(pessoa);
		save();
	}

O load eh o seguinte método:

public void load() throws FileNotFoundException{
		XStream xstream = new XStream();
		usuarios = (ArrayList<Usuario>) xstream.fromXML(new BufferedInputStream(new FileInputStream("usuarios.xml")));		
	}

O save é o seguinte método:

public void save() throws FileNotFoundException{
		XStream xstream = new XStream();
		xstream.toXML(usuarios, new BufferedOutputStream(new FileOutputStream("usuarios.xml")));
	}

Que transforma usuarios(uma lista de pessoas) em código xml e coloca dentro de usuarios.xml

Agora tá acontecendo algo estranho... nesse método aki ele apaga o arquivo:

public void clear(){
		File file = new File("usuarios.xml");
		if (file.exists()) {
			System.gc();			
			file.delete();			
		}
	}
Então, quando se apaga o arquivo e dpois se chama o criarConta e se cria o arquivo... O conteúdo do arquivo antigo continua lá!!!! Sendo que ele já estava apagado!

Como eu faço pra apagar o arquivo e quando instanciar ele de novo ele ficar vazio? Ou então tem alguma maneira de apagar o conteúdo do arquivo sem deletá-lo?

1 Resposta

T

Dica: você está fazendo “System.gc” para forçar a fechar os arquivos que estavam abertos, não?
Saiba que isso é indicativo que seu código tem problemas. Corrija o “load” e o “save” para isto aqui: (é claro que o código vai dar erro de compilação porque não tratei a IOException causada por in.close ou out.close(), mas isso é por sua conta:

public void load() throws FileNotFoundException{
		XStream xstream = new XStream();
                BufferedInputStream in = new BufferedInputStream (new FileInputStream ("usuarios.xml"));
		usuarios = (ArrayList<Usuario>) xstream.fromXML(in);		
                in.close();
	}

e

public void save() throws FileNotFoundException{
		XStream xstream = new XStream();
                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("usuarios.xml"));
		xstream.toXML(usuarios, out);
                out.close();
	}
Criado 6 de junho de 2008
Ultima resposta 6 de jun. de 2008
Respostas 1
Participantes 2