Eu preciso pegar informações específicas do arquivo e imprimir na tela do Extrato da conta (que está em Html), só que eu não tenho idéia de como fazer alguém pode me ajudar.
package classes.menu;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
@ManagedBean
public class Cadastro {
public String nome;
public int numAge;
public String numConta;
public String getNumConta() {
return numConta;
}
public void setNumConta(String numConta) {
this.numConta = numConta;
}
public void setNumAge(int numAge) {
this.numAge = numAge;
}
public double getSaldo() {
return saldo;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
public double saldo;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getNumAge() {
return numAge;
}
public void gravar() {
try {
FileOutputStream arquivo = new FileOutputStream("C:\\Users\\e803823\\Documents\\Menu\\Arquivos\\dados.txt", true);
PrintWriter pr = new PrintWriter(arquivo);
pr.print("Numero da Agencia :" + numAge);
pr.print("Numero da Conta :" + numConta);
pr.print("Saldo :" + saldo);
pr.println("Nome:" + nome);
pr.close();
arquivo.close();
} catch (Exception e) {
System.out.println("Erro escrever arquivo");
}
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Mensagem de confirmação:","Gravado com sucesso!"));
}
public void ler() {
try {
FileInputStream arquivo = new FileInputStream("C:\\Users\\e803823\\Documents\\Menu\\Arquivos\\dados.txt");
InputStreamReader input = new InputStreamReader(arquivo);
@SuppressWarnings("resource")
BufferedReader br = new BufferedReader(input);
String linha;
do{
linha = br.readLine();
if(linha != null){
String[] palavras = linha.split(";");
System.out.println("Nova linha");
for (int i = 0; i < palavras.length; i++) {
numConta = palavras[i];
}
System.out.println("O que esta imprimindo "+numConta);
}
}while(linha != null);
} catch (Exception e) {
System.out.println("Erro ler arquivo");
}
}
}
<h:head>
</h:head>
<h:body>
Tela Cadastro:
<h:form>
<h:panelGrid id=“grid” columns=“3” cellpadding=“5”>
<p:outputLabel for=“default” value=“Número da Agência:” />
<p:inputText id=“default” required=“true” value="#{cadastro.numAge}" />
<p:message for=“default” />
<p:outputLabel for="icon" value="Número da Conta:" />
<p:inputText id="icon" required="true" value="#{cadastro.numConta}"/>
<p:message for="icon" display="icon" />
<p:outputLabel for="tt" value="Saldo:" />
<p:inputText id="tt" required="true" value="#{cadastro.saldo}"/>
<p:message for="tt" display="tooltip" />
<p:outputLabel for="txt" value="Nome:" />
<p:inputText id="txt" required="true" value="#{cadastro.nome}"/>
<p:message for="txt" display="text" />
</h:panelGrid>
<p:messages id="messages" showDetail="true" autoUpdate="true"
closable="true" />
<p:commandButton value="Sim" actionListener="#{mensagemCadastro.sim}" update="grid"/>
<p:commandButton value="Não" actionListener="#{mensagemCadastro.nao}" />
<p:commandButton value="Gravar" actionListener="#{cadastro.gravar()}" />
<p:commandButton value="ler" actionListener="#{cadastro.ler}" />
</h:form>
</h:body>
<h:head></h:head>
<h:body>
<h3>Extrato da Conta:</h3>
<p:panelGrid columns="2">
<h:outputText value="Número da Agência: " />
<h:outputText value="#{cadastro.numAge}" />
<h:outputText value="Número da Conta: " />
<h:outputText value="#{cadastro.numConta}" />
<h:outputText value="Nome do Usuário da Conta: " />
<h:outputText value="#{cadastro.nome}" />
<h:outputText value="Saldo Atual: " />
<h:outputText value="#{saque.saldo}" />
</p:panelGrid>
</h:body>
Bom, basicamente, posso ver que você já tem o código praticamente pronto.
Agora, precisamos saber como o arquivo a ser lido está e qual a dificuldade, exata, que você encontra.
O arquivo a ser lido ele está assim:
Nome;kati;
Numero da Conta;2222Nome;eu;
Numero da Conta;2222Nome;Feliz;
Numero da Conta;8888Nome;kati;
Numero da Conta;2222Numero da Agencia :222222Numero da Conta :2222Saldo :0.02222Nome:kati
Numero da Agencia :222222Numero da Conta :5555Saldo :0.02222Nome:kati
Eu não estou conseguindo pegar uma informação específica e imprimir na tela do Extrato da Conta(último código)
O arquivo está formatado corretamente?
Nome;kati;
Numero da Conta;2222Nome;eu;
Numero da Conta;2222Nome;Feliz;
Numero da Conta;8888Nome;kati;
Numero da Conta;2222Numero da Agencia :222222Numero da Conta :2222Saldo :0.02222Nome:kati
Numero da Agencia :222222Numero da Conta :5555Saldo :0.02222Nome:kati
Pois, se este é o formato a ser lido, você vai ter sim, muita dificuldade em ler os dados, afinal, não existe um padrão que defina qual a informação em cada linha
Quando rodo o código ele grava assim, tem alguma forma de gravar cada coisa em uma linha?
Tem
pr.print("Numero da Agencia :" + numAge + "\n");
pr.print("Numero da Conta :" + numConta + "\n");
pr.print("Saldo :" + saldo + "\n");
pr.println("Nome:" + nome);
Uma alternativa seria gravar tudo em uma única linha, separando por “,” ou “;”
pr.print("Numero da Agencia :" + numAge + ";");
pr.print("Numero da Conta :" + numConta + ";");
pr.print("Saldo :" + saldo + ";");
pr.println("Nome:" + nome + ";");//Aqui coloca-se o ; e o \n para indicar o término da linha
Caso não haja necessidade de abrir o arquivo para leitura, fora do programa, eu optaria por mudar as labels para algo mais simples
pr.print("AGENCIA:" + numAge + "\n");
pr.print("CONTA:" + numConta + "\n");
pr.print("SALDO:" + saldo + "\n");
pr.println("NOME:" + nome);
E substituiria a leitura para algo assim
String agencia = "", conta = "", saldo = "", nome = "";
Scanner sc = new Scanner(new File("C:\\temp\\contas.txt"));
while(sc.hasNextLine()) {
agencia = sc.nextLine();
conta = sc.nextLine();
saldo = sc.nextLine();
nome = sc.nextLine();
}
sc.close();
System.out.println("Nome: " + nome.split(":")[1]);
System.out.println("Agência: " + agencia.split(":")[1]);
System.out.println("Conta: " + conta.split(":")[1]);
System.out.println("Saldo: " + saldo.split(":")[1]);
O risco dessa abordagem é que a informação a ser exibida sempre será referente ao último registro gravado.
Uma simples verificação por nome já resolve (dentro do while).
1 curtida
Muito Obrigado Luis , vou tentar aqui ,qualquer coisa te falo
Ah sim, se optar pela abordagem de gravar tudo em uma linha, pode resolver o problema assim:
pr.print(numAge + “;”);//Agência
pr.print(numConta + “;”);//Conta
pr.print(saldo + “;”);//Saldo
pr.println(nome + “;”);//Nome
E a leitura ficaria parecida com isso
String agencia = "", conta = "", saldo = "", nome = "";
Scanner sc = new Scanner(new File("C:\\temp\\contas.txt"));
while(sc.hasNextLine()) {
String linha = sc.nextLine();
String partes[] = linha.split(";");
agencia = partes[0];
conta = partes[1];
saldo = partes[2];
nome = partes[3];
}
sc.close();
System.out.println("Nome: " + nome);
System.out.println("Agência: " + agencia);
System.out.println("Conta: " + conta);
System.out.println("Saldo: " + saldo);
1 curtida
Deu certo, muito obrigada !!!
Agora não estou conseguindo imprimir na tela com JSF
Veja que, na tela, você tem os atributos mapeados da seguinte maneira
<h:outputText value="Número da Agência: " />
<h:outputText value="#{cadastro.numAge}" />
<h:outputText value="Número da Conta: " />
<h:outputText value="#{cadastro.numConta}" />
<h:outputText value="Nome do Usuário da Conta: " />
<h:outputText value="#{cadastro.nome}" />
<h:outputText value="Saldo Atual: " />
<h:outputText value="#{saque.saldo}" />
Onde leu agência, precisa atribuir à variável numAge, onde leu conta, atribuir à variável numConta, onde leu nome, atribuir à variável nome.
Vou tentar, que eu uso essas variaveis para outras coisas
Eu me referi a estas variáveis por ser a única fonte de apresentação que encontrei.
Se precisa de algo diferente, talvez seja interessante criar um xhtml específico para isso.
package classes.menu;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Scanner;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import classes.menu.Cadastro;;
@ManagedBean
public class Dados extends Cadastro {
public String nome;
public int numAge;
public String numConta;
public String agencia = “”;
public String conta = “”;
public String Asaldo = “”;
public String Anome = “”;
public String getNumConta() {
return numConta;
}
public void setNumConta(String numConta) {
this.numConta = numConta;
}
public void setNumAge(int numAge) {
this.numAge = numAge;
}
public double getSaldo() {
return saldo;
}
public String getAgencia() {
return agencia;
}
public void setAgencia(String agencia) {
this.agencia = agencia;
}
public String getConta() {
return conta;
}
public void setConta(String conta) {
this.conta = conta;
}
public String getAsaldo() {
return Asaldo;
}
public void setAsaldo(String asaldo) {
Asaldo = asaldo;
}
public String getAnome() {
return Anome;
}
public void setAnome(String anome) {
Anome = anome;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
public double saldo;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getNumAge() {
return numAge;
}
public void gravar() {
try {
FileOutputStream arquivo = new FileOutputStream("C:\\Users\\e803823\\Documents\\Menu\\Arquivos\\dados.txt", true);
PrintWriter pr = new PrintWriter(arquivo);
pr.print("AGENCIA:" + numAge + "\n");
pr.print("CONTA:" + numConta + "\n");
pr.print("SALDO:" + saldo + "\n");
pr.println("NOME:" + nome);
pr.close();
arquivo.close();
} catch (Exception e) {
System.out.println("Erro escrever arquivo");
}
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Mensagem de confirmação:","Gravado com sucesso!"));
}
public void ler() throws FileNotFoundException {
Scanner sc;
sc = new Scanner(new File("C:\\Users\\e803823\\Documents\\Menu\\Arquivos\\dados.txt"));
while(sc.hasNextLine()) {
agencia = sc.nextLine();
conta = sc.nextLine();
Asaldo = sc.nextLine();
Anome = sc.nextLine();
}
sc.close();
System.out.println("Nome: " + Anome.split(":")[1]);
System.out.println("Agência: " + agencia.split(":")[1]);
System.out.println("Conta: " + conta.split(":")[1]);
System.out.println("Saldo: " + Asaldo.split(":")[1]);
}
}
Estou fazendo assim, mas mesmo assim não está indo
Neste caso, você pode ignorar esta parte do código. Era apenas para exemplificar.
Além disso, você está tentando exibir estes dados a partir deste botão?
Se sim, você precisa definir onde estes dados serão exibidos, utilizando a propriedade “update” do commandButton.
Mas eu preciso que aparece na tela do Extrato da conta, já fiz de tudo esse negócio não da certo
Vamos por partes.
Você dispara o evento clicando no botão “Ler”, certo? Esse evento direciona a tua requisição à página “Extrato da conta”?
Não este botão ler eu só coloquei, para saber que ta imprimindo certo, seria só para mim não para o usuário. A página Extrato de conta é uma coisa separada
Entendi, então você acessa a página extrado de conta e ela vem com os dados em branco, certo?
Isso ocorre por você não ter vinculado os valores referentes aos campos antes de carregar o xhtml.
Para resolver esse problema, você precisa utilizar a tag f:metadata
<f:metadata>
<f:event type="preRenderView" listener="#{nomeDoBean.metodoASerExecutado}"/>
</f:metadata>
Onde nomeDoBean é o nome do managed bean em uso e o nome do método pode ser substituído por ler