0
I am doing a job in college for the discipline of OOP in java. In this way it was requested a crud operating files ". txt". I’m having a hard time manipulating the list I put in there. I can provide parts of the code that are missing. But after a lot of research on the internet I saw that the recommended would be:
- create a temporary.txt file
- remove the original ".txt file"
- rename temporary to original name
- after this remove the temporary.
That didn’t work.
Man arquivo.txt
original with the list I wish to manipulate :
1:Gabriel:123123:16/02/1997:3000.0:200.0:10.0:Gustavo:2345:12/12/1212
2:Rafael:123123:16/02/1997:3000.0:200.0:10.0:Joao:2345:12/12/1212
3:Lucas:123123:16/02/1997:3000.0:200.0:10.0:Joao:2345:12/12/1212
4:Tiago:123123:16/02/1997:3000.0:200.0:10.0:Joao:2345:12/12/1212
5:Jonas:123123:16/02/1997:3000.0:200.0:10.0:Joao:2345:12/12/1212
6:Yago Pikachu:123123:16/02/1997:3000.0:200.0:10.0:Donizette:2345:12/12/1212
7:German Cano:123123:16/02/1997:3000.0:200.0:10.0:Tales Magno:2345:12/12/1212
8:Roberto Dinamite:123123:16/02/1997:3000.0:200.0:10.0:Mauro Galvão:2345:12/12/1212
I know the list is correct in memory in the form of TreeSet
because I printed it on the eclipse console before trying to pass it to the ". txt".
My doubt is really on how to manipulate the file because after trying to remove the "original" and "rename" the "temporary" to the "original" name. The following mistake happened :
Here I show a print in the list console just before calling the method that handles the two files.
Code:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDate;
import java.util.TreeSet;
import Model.Pessoa;
import Model.VendedorExterno;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class AtualizarVendedorExternoService extends Application {
public static Stage atualizarTelaVendedorExternoStage = new Stage();
TreeSet<VendedorExterno> treeSetvendedor = new TreeSet<VendedorExterno>();
File arquivo = null;
File arquivoOrigem = null;
FileWriter recebearquivo = null;
BufferedWriter escreve = null;
FileReader recebearquivoleitura = null;
BufferedReader leDeArquivo = null;
String registro = null;
public static void fecharTela() {
atualizarTelaVendedorExternoStage.close();
}
public void abreUmArquivo() {
try {
arquivo = new File("arquivoTemporario.txt");
recebearquivo = new FileWriter(arquivo, false);
escreve = new BufferedWriter(recebearquivo);
} catch (Exception e) {
System.out.println(" Erro ao tentar abrir arquivo: " + e.getMessage());
}
}
public void gerenciaArquivos() {
File arquivoOriginal = new File("arquivo.txt");
System.out.println("\n Gerencía: \n");
System.out.println(this.treeSetvendedor);
//arquivoOriginal.delete();
// Apaga o arquivo original
if (!arquivoOriginal.delete()) {
System.out.println("Não foi possivel atualizar o arquivo original");
}
if (!this.arquivo.renameTo(arquivoOriginal))
System.out.println("Não foi possivel finalizar a atualização do arquivo");
}
public void fechaUmArquivo() {
try {
escreve.close();
recebearquivo.close();
} catch (IOException e) {
System.out.println(" Erro ao tentar fechar o arquivo: " + e.getMessage());
}
}
public void gravaVendedorEmTexto(VendedorExterno v) {
abreUmArquivo();
try {
escreve.write(v.toString());
escreve.newLine();
} catch (IOException e) {
System.out.println("Erro ao tentar escrever no arquivo: " + e.getMessage());
} finally {
fechaUmArquivo();
} // do arquivo.
}
public void gravaTreeSetDeVendedoresExternosEmTexto() {
try {
System.out.println("\n gravar treeset\n ");
System.out.println(this.treeSetvendedor);
for (VendedorExterno umVendedorExterno : this.treeSetvendedor) {
gravaVendedorEmTexto(umVendedorExterno);
}
gerenciaArquivos();
lerVendedores();// Atualiza o treesetVendedor que mantém em memória uma lista simulando a lista
} catch (Exception e) {
System.out.println("Erro ao gravar Vendedores em texto" + e.getMessage());
}
}
// Salvar os dados em memória no arquivo
public void Salvar() {
System.out.println("Salvar");
gravaTreeSetDeVendedoresExternosEmTexto();
lerVendedores();// Atualiza o treesetVendedor que mantém em memória uma lista simulando a lista
}
// Este método recebe os paramateros para atualizar em memória o Vendedor e o
// Cliente do Vendedor.
public void cadastrarVendedorExterno(int id, String nome, String telefone, String dataDeNascimento, String salario,
String comissao, String ajudaDeCusto, String clienteNome, String clienteTelefone,
String clienteDataDeNascimento) {
try {
if (!treeSetvendedor.isEmpty()) {
VendedorExterno vendedorAux = new VendedorExterno();
VendedorExterno v2 = new VendedorExterno();
for (VendedorExterno v : treeSetvendedor) {
if (v.getId() == id) {
v2 = new VendedorExterno(id, nome, telefone,
LocalDate.parse(dataDeNascimento, Pessoa.formatter), Double.parseDouble(salario.trim()),
Double.parseDouble(comissao.trim()), Double.parseDouble(ajudaDeCusto.trim()),
clienteNome, clienteTelefone,
LocalDate.parse(clienteDataDeNascimento, Pessoa.formatter));
System.out.println(v.toString());
vendedorAux = v;
break;
}
}
System.out.println(this.treeSetvendedor);
this.treeSetvendedor.remove(vendedorAux);
this.treeSetvendedor.add(v2);
System.out.println(this.treeSetvendedor);
System.out.println("\n fim \n");
}
} catch (Exception e) {
System.out.println("Falha ao tentar cadastrar Vendedor Externo" + e.getMessage());
}
}
public boolean abreUmArquivoLeitura() {
try {
arquivo = new File("arquivo.txt");
if (arquivo.exists()) {
recebearquivoleitura = new FileReader(arquivo);// fluxo de conexao
leDeArquivo = new BufferedReader(recebearquivoleitura);
return true;
}
} catch (Exception e) {
System.out.println(" Erro ao tentar abrir arquivo: " + e.getMessage());
}
return false;
}
public void fechaUmArquivoLeitura() {
try {
leDeArquivo.close();
recebearquivoleitura.close();
} catch (IOException e) {
System.out.println(" Erro ao tentar fechar o arquivo: " + e.getMessage());
}
}
public void lerVendedores() {
int id;
String nome;
String telefone;
LocalDate dataDeNascimento;
double salario;
double comissao;
double ajudaDeCusto;
String clienteNome;
String clienteTelefone;
LocalDate clienteDataDeNascimento;
try {
if (abreUmArquivoLeitura()) {
while ((registro = leDeArquivo.readLine()) != null) {
String[] campos = new String[11];
campos = registro.split(":");
id = Integer.parseInt(campos[0].trim());
nome = campos[1].trim();
telefone = campos[2].trim();
dataDeNascimento = LocalDate.parse(campos[3].trim(), Pessoa.formatter);
salario = Double.parseDouble(campos[4].trim());
comissao = Double.parseDouble(campos[5].trim());
ajudaDeCusto = Double.parseDouble(campos[6].trim());
clienteNome = campos[7].trim();
clienteTelefone = campos[8].trim();
clienteDataDeNascimento = LocalDate.parse(campos[9].trim(), Pessoa.formatter);
treeSetvendedor.add(new VendedorExterno(id, nome, telefone, dataDeNascimento, salario, comissao,
ajudaDeCusto, clienteNome, clienteTelefone, clienteDataDeNascimento));
}
}
} catch (FileNotFoundException e) { // tratando quando o arquivo não existe
System.err.println("Erro: arquivo nao existe. " + arquivo);
} catch (IOException e) { // tratando quando há erro no readLine()
System.err.println("Erro na leitura do arquivo: " + arquivo);
} catch (Exception e) {
System.out.println("Erro inesperado na leitura do arquivo \n \n ");
e.printStackTrace();
} finally {
fechaUmArquivoLeitura();
}
}
public String buscarPorId(int id) {
lerVendedores();
if (!treeSetvendedor.isEmpty()) {
for (VendedorExterno v : treeSetvendedor) {
if (v.getId() == id) {
return v.toString();
}
}
}
return "Nada foi encontrado";
}
@Override
public void start(Stage primaryStage) {
try {
Pane root = FXMLLoader.load(getClass().getResource("../View/AtualizarVendedorExterno.fxml"));
Scene scene = new Scene(root, 660, 400);
primaryStage.setScene(scene);
primaryStage.show();
lerVendedores();
} catch (Exception e) {
e.printStackTrace();
}
}
// Chama o método start para abrir uma nova janela.
public void abrirTela() {
try {
start(atualizarTelaVendedorExternoStage);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Update:
After code changes suggested by Anthony:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDate;
import java.util.TreeSet;
import Model.Pessoa;
import Model.VendedorExterno;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class AtualizarVendedorExternoService extends Application {
public static Stage atualizarTelaVendedorExternoStage = new Stage();
TreeSet<VendedorExterno> treeSetvendedor = new TreeSet<VendedorExterno>();
File arquivo = null;
File arquivoOrigem = null;
FileWriter recebearquivo = null;
BufferedWriter escreve = null;
FileReader recebearquivoleitura = null;
BufferedReader leDeArquivo = null;
String registro = null;
public static void fecharTela() {
atualizarTelaVendedorExternoStage.close();
}
public void abreUmArquivo() {
try {
arquivo = new File("arquivoTemporario.txt");
recebearquivo = new FileWriter(arquivo, false);
escreve = new BufferedWriter(recebearquivo);
} catch (Exception e) {
System.out.println(" Erro ao tentar abrir arquivo: " + e.getMessage());
}
}
public void gerenciaArquivos() {
File arquivoOriginal = new File("arquivo.txt");
System.out.println("\n Gerencía: \n");
System.out.println(this.treeSetvendedor);
//arquivoOriginal.delete();
// Apaga o arquivo original
if (!arquivoOriginal.delete()) {
System.out.println("Não foi possivel atualizar o arquivo original");
}
if (!this.arquivo.renameTo(new File("arquivo.txt")))
System.out.println("Não foi possivel finalizar a atualização do arquivo");
}
public void fechaUmArquivo() {
try {
escreve.close();
recebearquivo.close();
} catch (IOException e) {
System.out.println(" Erro ao tentar fechar o arquivo: " + e.getMessage());
}
}
public void gravaVendedorEmTexto(VendedorExterno v) {
try {
escreve.write(v.toString());
escreve.newLine();
} catch (IOException e) {
System.out.println("Erro ao tentar escrever no arquivo: " + e.getMessage());
}
}
public void gravaTreeSetDeVendedoresExternosEmTexto() {
try {
abreUmArquivo();
System.out.println("\n gravar treeset\n ");
System.out.println(this.treeSetvendedor);
for (VendedorExterno umVendedorExterno : this.treeSetvendedor) {
gravaVendedorEmTexto(umVendedorExterno);
}
gerenciaArquivos();
lerVendedores();// Atualiza o treesetVendedor que mantém em memória uma lista simulando a lista
} catch (Exception e) {
System.out.println("Erro ao gravar Vendedores em texto" + e.getMessage());
} finally {
fechaUmArquivo();
} // do arquivo.
}
// Salvar os dados em memória no arquivo
public void Salvar() {
System.out.println("Salvar");
gravaTreeSetDeVendedoresExternosEmTexto();
lerVendedores();// Atualiza o treesetVendedor que mantém em memória uma lista simulando a lista
}
// Este método recebe os paramateros para atualizar em memória o Vendedor e o
// cliente do Vendedor.
public void cadastrarVendedorExterno(int id, String nome, String telefone, String dataDeNascimento, String salario,
String comissao, String ajudaDeCusto, String clienteNome, String clienteTelefone,
String clienteDataDeNascimento) {
try {
if (!treeSetvendedor.isEmpty()) {
VendedorExterno vendedorAux = new VendedorExterno();
VendedorExterno v2 = new VendedorExterno();
for (VendedorExterno v : treeSetvendedor) {
if (v.getId() == id) {
v2 = new VendedorExterno(id, nome, telefone,
LocalDate.parse(dataDeNascimento, Pessoa.formatter), Double.parseDouble(salario.trim()),
Double.parseDouble(comissao.trim()), Double.parseDouble(ajudaDeCusto.trim()),
clienteNome, clienteTelefone,
LocalDate.parse(clienteDataDeNascimento, Pessoa.formatter));
System.out.println(v.toString());
vendedorAux = v;
break;
}
}
System.out.println(this.treeSetvendedor);
this.treeSetvendedor.remove(vendedorAux);
this.treeSetvendedor.add(v2);
System.out.println(this.treeSetvendedor);
System.out.println("\n fim \n");
}
} catch (Exception e) {
System.out.println("Falha ao tentar cadastrar Vendedor Externo" + e.getMessage());
}
}
public boolean abreUmArquivoLeitura() {
try {
arquivo = new File("arquivo.txt");
if (arquivo.exists()) {
recebearquivoleitura = new FileReader(arquivo);// fluxo de conexao
leDeArquivo = new BufferedReader(recebearquivoleitura);
return true;
}
} catch (Exception e) {
System.out.println(" Erro ao tentar abrir arquivo: " + e.getMessage());
}
return false;
}
public void fechaUmArquivoLeitura() {
try {
leDeArquivo.close();
recebearquivoleitura.close();
} catch (IOException e) {
System.out.println(" Erro ao tentar fechar o arquivo: " + e.getMessage());
}
}
public void lerVendedores() {
int id;
String nome;
String telefone;
LocalDate dataDeNascimento;
double salario;
double comissao;
double ajudaDeCusto;
String clienteNome;
String clienteTelefone;
LocalDate clienteDataDeNascimento;
try {
abreUmArquivoLeitura();
while ((registro = leDeArquivo.readLine()) != null) {
String[] campos = new String[11];
campos = registro.split(":");
id = Integer.parseInt(campos[0].trim());
nome = campos[1].trim();
telefone = campos[2].trim();
dataDeNascimento = LocalDate.parse(campos[3].trim(), Pessoa.formatter);
salario = Double.parseDouble(campos[4].trim());
comissao = Double.parseDouble(campos[5].trim());
ajudaDeCusto = Double.parseDouble(campos[6].trim());
clienteNome = campos[7].trim();
clienteTelefone = campos[8].trim();
clienteDataDeNascimento = LocalDate.parse(campos[9].trim(), Pessoa.formatter);
treeSetvendedor.add(new VendedorExterno(id, nome, telefone, dataDeNascimento, salario, comissao,
ajudaDeCusto, clienteNome, clienteTelefone, clienteDataDeNascimento));
}
} catch (FileNotFoundException e) { // tratando quando o arquivo não existe
System.err.println("Erro: arquivo nao existe. " + arquivo);
} catch (IOException e) { // tratando quando há erro no readLine()
System.err.println("Erro na leitura do arquivo: " + arquivo);
} catch (Exception e) {
System.out.println("Erro inesperado na leitura do arquivo \n \n ");
e.printStackTrace();
} finally {
fechaUmArquivoLeitura();
}
}
public String buscarPorId(int id) {
lerVendedores();
if (!treeSetvendedor.isEmpty()) {
for (VendedorExterno v : treeSetvendedor) {
if (v.getId() == id) {
return v.toString();
}
}
}
return "Nada foi encontrado";
}
@Override
public void start(Stage primaryStage) {
try {
Pane root = FXMLLoader.load(getClass().getResource("../View/AtualizarVendedorExterno.fxml"));
Scene scene = new Scene(root, 660, 400);
primaryStage.setScene(scene);
primaryStage.show();
lerVendedores();
} catch (Exception e) {
e.printStackTrace();
}
}
// Chama o método start para abrir uma nova janela.
public void abrirTela() {
try {
start(atualizarTelaVendedorExternoStage);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Upshot:
Update2:
//Unica mudança
//o método fechaarquivo(); eu removi de finally conforme solictado pelo Anthony Accioly e coloquei pra fechar antes de tentar gerenciar o arquivo.
public void gravaTreeSetDeVendedoresExternosEmTexto() {
try {
abreUmArquivo();
System.out.println("\n gravar treeset\n ");
System.out.println(this.treeSetvendedor);
for (VendedorExterno umVendedorExterno : this.treeSetvendedor) {
gravaVendedorEmTexto(umVendedorExterno);
}
fechaUmArquivo();
gerenciaArquivos();
lerVendedores();// Atualiza o treesetVendedor que mantém em memória
uma lista simulando a lista
} catch (Exception e) {
System.out.println("Erro ao gravar Vendedores em texto" +
e.getMessage());
}
}
Hi Gabriel, could you paste the code instead of posting an image? I can not confirm only with the image you posted, but it seems to me that you are writing one seller at a time, always closing and overwriting the file; that is, at the end you will have a file only with the last seller of
TreeSet
. Instead you should have a blocktry catch finally
insidegravaTreeSet..
which: 1) opens the file only once before starting thefor
, 2) writes each seller within thefor
without closing the file and finally closes the file in the blockfinally
.– Anthony Accioly
Okay. I’m going to remove the yams and put in the necessary code. I just haven’t been able to put the things you mentioned in that comment. But I’m gonna change here and put it right away.
– Gabriel Silva
Gabriel, post also the
arquivo.txt
in textual format, if not other people can not test (See How to build a Minimum, Complete, and Verifiable example). It seems that now the temporary file is being generated correctly right? Again I have no way to test without a MVCE, but I believe that thearquivo.txt
be empty because things are happening out of order. That is, you should only perform steps 2 and 3 of your list after you have closed the temporary file.– Anthony Accioly
All right, I’ll post.
– Gabriel Silva
I positioned just below the first image that shows the ".txt file"
– Gabriel Silva
The temporary file is correct, I did as explained in the first comment. I will still perform this part of closing the temporary file first. I really had not understood it that way.
– Gabriel Silva
I did as you said and it worked. Thank you very much. I think I now understand my mistake of not closing the file properly.
– Gabriel Silva