sandy
Fevereiro 1, 2019, 6:41pm
#1
Olá!
Estou com dificuldade de validar login e senha de usuário percorrendo um arquivo.csv.
No meu código não está validando. Preciso de ajuda, pfv!
String userName = jtxtUsuario.getText();
String pass = jSenha.getText();
String linha = new String();
String nomeArquivo = "C:\\usuarios.csv";
File arq = new File(nomeArquivo);
if(arq.exists()) {
FileReader leitorArquivo = null;
try {
leitorArquivo = new FileReader(nomeArquivo);
} catch (FileNotFoundException ex) {
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
BufferedReader br = new BufferedReader(leitorArquivo);
while(true) {
try {
linha = br.readLine();
for (int i = 0; i > linha.length(); i++) {
String[] result = linha.split(";");
if (userName.equals(linha)&& (pass.equals(linha))){
System.out.println("userName, login " + userName );
System.out.println("pass, senha " + pass);
System.out.println("result " + result);
//System.out.println("obj " + obj);
KitControlForm kc = new KitControlForm();
kc.setVisible(true);
dispose();
}
}
} catch (IOException ex) {
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("linha " + linha);
if(linha == null) {
break;
}
}
}
1 curtida
Acredito que essa parte esteja errada. Você está comparando se o userName é igual a linha e se o pass também é igual a linha. Acho meio difícil a linha toda ser o userName e o password ao mesmo tempo.
Lembre-se que o CSV pode possuir vários dados na mesma linha, e que esses dados são separados por um delimitador (no seu caso, por ;).
sandy
Fevereiro 1, 2019, 7:14pm
#3
Como ficaria, devo fazer por coluna? fiz dessa forma, mas tambem nao deu certo.
Scanner sc = null;
try {
sc = new Scanner(new File("C:\\usuarios.csv"));
} catch (FileNotFoundException ex) {
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
while(sc.hasNextLine()) {
String linha = sc.nextLine();
String[] colunas = linha.split(";");
System.out.println("linha " + linha);
System.out.println("colunas " + colunas[0]);
if ((colunas.equals(userName)) && (colunas.equals(pass))){
KitControlForm kc = new KitControlForm();
kc.setVisible(true);
dispose();
}else{
if (userName.equals(linha)&& (pass.equals(linha))){
}
}
}
Supondo que uma linha do seu CSV seja assim:
userNameAAA;passBBB
O seu código poderia ficaria assim:
String linha = sc.nextLine();
String[] colunas = linha.split(";");
String userNameValue = colunas[0]); // userNameAAA
String passValue = colunas[1]); // passBBB
if (userNameValue.equals(userName) && passValue.equals(pass)) {
// ...
}
sandy
Fevereiro 1, 2019, 7:29pm
#5
Como ficaria para 5 logins e senhas na lista? Só sei que seria um for mas esse for fica antes ou depois da condição?
O seu código já atenderia pois já está dentro de um while
Scanner sc = null;
try {
sc = new Scanner(new File("C:\\usuarios.csv"));
} catch (FileNotFoundException ex) {
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
while(sc.hasNextLine()) {
String linha = sc.nextLine();
String[] colunas = linha.split(";");
String linha = sc.nextLine();
String[] colunas = linha.split(";");
String userNameValue = colunas[0]);
String passValue = colunas[1]);
if (userNameValue.equals(userName) && passValue.equals(pass)) {
KitControlForm kc = new KitControlForm();
kc.setVisible(true);
dispose();
}
}
sandy
Fevereiro 1, 2019, 7:31pm
#7
Obrigada, vou testar aqui.
Agora vc tem que ver o que vai fazer com o resultado, pois, caso encontra o username e o password no CSV, vc está criando uma instância do objeto KitControlForm, porém, vc não está fazendo nada com ele.
sandy
Fevereiro 1, 2019, 7:36pm
#9
Se o resultado do login e senha for verdadeiro eu quero abrir a tela principal e fechar a tela de login.
Ah sim, então esse KitControlForm é uma janela. Entendi.
sandy
Fevereiro 1, 2019, 8:01pm
#11
Não consigo pegar as duas colunas, já tentei de várias formas mas o resultado só tras a primeira coluna.
userNameValue
linha adm;adm
userNameValue adm
linha usu;123
userNameValue usu
Scanner sc = null;
try {
sc = new Scanner(new File("C:\\usuarios.csv"));
} catch (FileNotFoundException ex) {
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
while(sc.hasNextLine()) {
String linha = sc.nextLine();
String[] colunas = linha.split(";");
// String[] coluna1 = linha.split(";");
String userNameValue = colunas[0];
// String passValue = colunas[1];
System.out.println("linha " + linha);
// System.out.println("passValue " + passValue);
System.out.println("userNameValue " + userNameValue);
// System.out.println("coluna1 " + coluna1[1]);
if ((colunas.equals(userName)) && (colunas.equals(pass))){
KitControlForm kc = new KitControlForm();
kc.setVisible(true);
dispose();
}else{
if (userName.equals(linha)&& (pass.equals(linha))){
}
}
}
Manda o conteúdo do seu CSV pra gente ver.
Oi sandy.
Fiz um teste aqui e funcionou:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
*
* @author Abner
*/
public class LerCSV {
public static void main(String[] args) {
String arquivo = "C:\\Imperium\\Usuarios.csv"; //Seu arquivo
BufferedReader buff = null;
String linha = "";
String separacao = ";"; //Se a separação das colunas é: . ou , ou ;
try {
buff = new BufferedReader(new FileReader(arquivo));
//Leitura de linha por linha, não imprimindo a última linha: null
while ((linha = buff.readLine()) != null) {
String[] leitura = linha.split(separacao);
//leitura[0]: representa a primeira coluna, leitura[1]: a segunda coluna, e assim sucessivamente.
System.out.println("Usuário= " + leitura[0] + ", Senha= " + leitura[1]);
//Verificação
if (leitura[0].equals("adm") && leitura[1].equals("adm")) {
System.out.println("Login Efetuado com sucesso");
}
}
} catch (FileNotFoundException e) {
System.out.println("Arquivo não encontrado.\nErro:" + e);
} catch (IOException e) {
System.out.println("Erro ao abrir arquivo.\nErro: " + e);
} finally {
//Fechando leitura do arquivo (Caso queira usa-lo depois)
if (buff != null) {
try {
buff.close();
} catch (IOException e) {
System.out.println("Erro ao fechar arquivo.\nErro: " + e);
}
}
}
}
No seu caso é usando o Scanner, então é só trocar o .equals("adm") pela sua variável.
Edit:
Fiz um exemplo com o Scanner e funcionou tranquilo tbm, resultado:
Olá, diga-nos o seu nome:
adm
Ok, agora digite a sua senha:
adm
Você digitou: adm, adm
Ok, lendo o arquivo...
Por favor, aguarde.
Usuário= login, Senha= senha
Usuário= adm, Senha= adm
Login Efetuado com sucesso
Usuário= usu, Senha= 123
Usuário= joao, Senha= 321
Resumindo, cria o Scanner normalmente e depois muda a condição:
//Verificação
if (leitura[0].equals(nome) && leitura[1].equals(senha)) {
System.out.println("Login Efetuado com sucesso");
}
sandy
Fevereiro 2, 2019, 11:20pm
#15
Deu certo.
private void validaLogin() {
String userName = jtxtUsuario.getText();
String pass = jtxtSenha.getText();
String arquivo = "C:\\Usuarios\\usuarios.csv";
BufferedReader buff = null;
String linha = "";
String separacao = ";";
try {
buff = new BufferedReader(new FileReader(arquivo));
//Leitura de linha por linha, não imprimindo a última linha: null
while ((linha = buff.readLine()) != null) {
String[] leitura = linha.split(separacao);
//leitura[0]: representa a primeira coluna, leitura[1]: a segunda coluna, e assim sucessivamente.
System.out.println("Usuário= " + leitura[0] + ", Senha= " + leitura[1]);
//Verificação
if (leitura[0].equals(userName) && leitura[1].equals(pass)) {
// if (leitura[0].equals("adm") && leitura[1].equals("adm")) {
System.out.println("Login Efetuado com sucesso");
TelaPrincipal tp = new TelaPrincipal ();
tp.setVisible(true);
dispose();
}
System.out.println("senha incorreta");
JOptionPane.showMessageDialog(null, "Usuário ou senha está incorreto!");
}
} catch (FileNotFoundException e) {
System.out.println("Arquivo não encontrado.\nErro:" + e);
} catch (IOException e) {
System.out.println("Erro ao abrir arquivo.\nErro: " + e);
} finally {
//Fechando leitura do arquivo (Caso queira usa-lo depois)
if (buff != null) {
try {
buff.close();
} catch (IOException e) {
System.out.println("Erro ao fechar arquivo.\nErro: " + e);
}
}
}
Só não estou acertando onde colocar a mensagem de erro: login e senha incorreto.
}
System.out.println(“senha incorreta”);
JOptionPane.showMessageDialog(null, “Usuário ou senha está incorreto!”);
}
coloquei como estava no exemplo que vc passou, mas exibe a mensagem mais de uma vez. Acredito que é porcausa do loop. Mas já tentei colocar em outros lugares e nao tá dando certo.
sandy
Fevereiro 5, 2019, 2:14pm
#16
Preciso de ajuda Urgente!!!Podem me ajudar!!
Não consigo validar o login e senha, não tá dando certo o codigo, só ler a primeira linha qdo dou break; qdo tiro fica repetindo a msg do JOptionpane na condição if e else.
String userName = jtxtUsuario.getText();
String pass = jSenha.getText();
String arquivo = “C:\Usuarios\usuarios.csv”;
BufferedReader buff = null;
String linha = "";
String separacao = ";";
try {
buff = new BufferedReader(new FileReader(arquivo));
//Leitura de linha por linha, não imprimindo a última linha: null
while ((linha = buff.readLine()) != null) {
String[] leitura = linha.split(separacao);
//leitura[0]: representa a primeira coluna, leitura[1]: a segunda coluna, e assim sucessivamente.
System.out.println("Usuário= " + leitura[0] + ", Senha= " + leitura[1]);
//Verificação
if (leitura[0].equals(userName) && leitura[1].equals(pass)) {
// if (leitura[0].equals("adm") && leitura[1].equals("adm")) {
System.out.println("Login Efetuado com sucesso");
// System.setProperty("login",userName);
TelaPrincipal tp = new TelaPrincipal(userName);
tp.setVisible(true);
String jlblOperadorNome = userName;
dispose();
break;
}else{
if (!leitura[0].equals(userName) ) {
System.out.println("login ou senha incorreto " + userName );
JOptionPane.showMessageDialog(null, "login ou senha incorreta!");
// break;
}
}
}
} catch (FileNotFoundException e) {
System.out.println("Arquivo não encontrado.\nErro:" + e);
} catch (IOException e) {
System.out.println("Erro ao abrir arquivo.\nErro: " + e);
} finally {
//Fechando leitura do arquivo (Caso queira usa-lo depois)
if (buff != null) {
try {
buff.close();
} catch (IOException e) {
System.out.println("Erro ao fechar arquivo.\nErro: " + e);
}
}
}
}
@sandy
Boa tarde, amigos.
Tem bastante gente ajudando mas vou deixar minha contribuição como sempre. Segue:
package br.com.sres.gutxml.teste;
import java.io.File;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JOptionPane;
public class Testes {
public static void main(String[] args) {
Testes t = new Testes();
t.login(jtxtUsuario.getText(), jSenha.getText(), "C:\\Usuarios\\usuarios.csv");
}
public void login(String userName, String pass, String arquivo) {
if (validaLogin(userName, pass, arquivo)) {
System.out.println("Login Efetuado com sucesso");
openTelaPrincipal();
} else {
System.out.println("login ou senha incorreto");
JOptionPane.showMessageDialog(null, "login ou senha incorreta!");
}
}
public void openTelaPrincipal() {
TelaPrincipal tp = new TelaPrincipal(userName);
tp.setVisible(true);
String jlblOperadorNome = userName;
this.dispose();
}
public boolean validaLogin(String user, String senha, String arquivo) {
boolean sucess = false;
Map<String, String> mapUser = new HashMap();
getLines(arquivo)
.forEach(l -> {
String[] strs = l.split(";");
mapUser.put(strs[0], strs[1]);
});
if (mapUser.containsKey(user)) {
return mapUser.get(user).equals(senha);
}
return sucess;
}
public List<String> getLines(String path) {
List<String> lines = new ArrayList();
try {
lines = Files.readAllLines(new File(path).toPath());
} catch (Exception ex) {
ex.printStackTrace();
}
return lines;
}
}
Espero que ajude em algo.
1 curtida