Java - Logearse en java desde fichero de texto

 
Vista:
sin imagen de perfil
Val: 22
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Logearse en java desde fichero de texto

Publicado por ibai (11 intervenciones) el 21/06/2019 15:43:07
Buenas, estoy haciendo un proyecto y como hay problemas con la base de datos de derby, me han mandado a hacerlo con ficheros.
Ya he hecho la funcion de registrarse, que es escribir en un fichero el nombre, usuario, y contraseña.
Y ahora estoy teniendo dudas de como de ese fichero al leerlo, el programa me reconozca que parte es el usuario y que es la contraseña.
De momento he intentado dentro del bucle donde se lee el fichero esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
static void login() throws SQLException, FileNotFoundException, IOException{
 
        System.out.println("Introduce tu usuario");
        String user = sc.next();
        System.out.println("Introduce tu pass");
        String pass = sc.next();
 
        String nombreFichero = "C://Users//ibai//Desktop/Usuarios.txt";    //Cambiar ruta entre comillas
        File fichero = new File(nombreFichero);
 
            if(fichero.exists()){
 
                FileReader fr = new FileReader(nombreFichero);
                BufferedReader bf = new BufferedReader(fr);
 
                while ((nombreFichero = bf.readLine())!=null) {
                   //System.out.println(nombreFichero);
                   if(user==User&&Pass==pass){
                       System.out.println("Bienvenido: " + user);
                       if (tipo==1) {
                           MenuAdmin();
                       }else if(tipo==2){
                           MenuUsuario();
                       }
                   }else{
                       System.out.println("Usuario o contraseña no correctos.");
                   }
                }bf.close();
 
            }else{
                System.out.println("Aún no existe ningún usuario. "
                        + "Vuelva a la opción 1 y cree un usuario para ejecutar esta función.");
            }
 
 
 
 
 
      }
uno es el user/pass que se introduce para logearse y el otro es que se escribio en el fichero, nose si voy bien pero de momento no me esta funcionando.

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 22
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Logearse en java desde fichero de texto

Publicado por ibai (11 intervenciones) el 21/06/2019 16:01:29
Al final puse todo el codigo de la funcion pero bueno, al ejecutar la funcion ocurre esto:
Introduce tu usuario
ibai
Introduce tu pass
ibairn
Usuario o contraseña incorrectos.
Usuario o contraseña incorrectos.
Usuario o contraseña incorrectos.
entra dentro del ifelse pero no reconoce que son los mismos datos que estan en el fichero. Nose si es por que la condicion dentro del if esta mal, o si tengo que hacerlo de alguna otra forma.

Gracias de antemano y un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 147
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Logearse en java desde fichero de texto

Publicado por Yamil Bracho (2302 intervenciones) el 21/06/2019 16:03:53
En java los string (y tipos referencia) se compraran usando el metodo equals.
Cambia
if(user==User&&Pass==pass){
a
if (user.equals(User) && pass.equals(Pass)) {

Lo otro es que no veo donde inicializas las variables User y Pass que supuestamente son las que lees del fichero de texto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 22
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Logearse en java desde fichero de texto

Publicado por ibai (11 intervenciones) el 21/06/2019 16:09:17
Estan fuera de la funcion, se declaran en la clase y se inicializan dentro de la funcion registrarse
Te lo pongo por si le quieres hechar un vistazzo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class FinalDam {
    static Usuarios[] listUser= new Usuarios[100];
    static int nUser;
    static String User="Desconocido";
    static String Pass="Desconocido";
    static int tipo=0;
 
static void registrarse() throws SQLException{
 
        int cierraWhile = 0;
 
        while(nUser<listUser.length && cierraWhile != 1){
        	Usuarios U = new Usuarios();
			System.out.println("Introduzca sus datos. ");
 
                        System.out.println("Nombre de usuario: ");
				User = sc.next();
                        System.out.println("Contraseña (solo letras): ");
				Pass = sc.next();
                        System.out.println("Si se quiere registrar como administrador pulse 1, de lo contrario pulse 2. ");
                                tipo = sc.nextInt();
 
 
                        U.setUser(User);
                        U.setPass(Pass);
                        U.setTipo(tipo);
			listUser[nUser]= U ;
			nUser++;
 
			if(nUser==listUser.length){
				System.out.println("Almacenamiento lleno.");
                        }
 
            System.out.println("¿Quiere dejar de introducir usuarios? teclée: 1 =,0 = no.");
            cierraWhile = sc.nextInt();
        }
        //Guardar usuario
        System.out.println("Guardando el usuario en: Usuarios.txt");
        try{
            File nombreFichero = new File("C://Users//ibai//Desktop/Usuarios.txt");
            FileWriter fw = new FileWriter(nombreFichero,true);
            BufferedWriter bw = new BufferedWriter(fw);
            PrintWriter pw = new PrintWriter(bw);
 
                for (int i = 0; i < nUser; i++) {
 
                    pw.println(listUser[i].getUser());
                    pw.println(listUser[i].getPass());
                    pw.print(listUser[i].getTipo());
 
                }pw.close();
 
        }catch(IOException ioe){
            System.out.println("No se ha podido guardar. Error: "+ ioe);
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 22
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Logearse en java desde fichero de texto

Publicado por ibai (11 intervenciones) el 21/06/2019 16:24:51
Me sigue dando el mismo resultado con la funcion equals. Esta funcion funciona con objetos, nose si al leerlo el programa considera la linea un objeto.
Tal vez leyendo una linea que entre en un if, y despues otro if para la contraseña?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 74
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Logearse en java desde fichero de texto

Publicado por Daniel (18 intervenciones) el 21/06/2019 16:38:37
Prueba a a leer el fichero cuando guardas los datos de el programa que me parece que debe estar vacio ya que no logro identificar donde es que estas guardando las lineas en el txt evita usar tildes o simbolos raros
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 22
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Logearse en java desde fichero de texto

Publicado por ibai (11 intervenciones) el 21/06/2019 16:54:43
El fichero que se crea puedo ver que escribe los datos que se han introducido, es decir, no esta vacio.
De todas formas intentare eso que me dices, gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 74
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Logearse en java desde fichero de texto

Publicado por Daniel (18 intervenciones) el 21/06/2019 17:01:21
enseña un txt de pruba aquí
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 22
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Logearse en java desde fichero de texto

Publicado por ibai (11 intervenciones) el 21/06/2019 17:18:06
Aqui lo dejo, de todas formas me acabo de dar cuenta que al poner el usuario existente, en el codigo he puesto que me imprima la variable que se acaba de insertar y me puso: Bienvenido desconocido. Entonces le quite el "Desconocido" y deje la variable solo declarada. Entonces me dijo: Bienvenido null.
sera un problema que tengo con las variables que las tengo mal declaradas e inicializadas tal vez
usuariostxt
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 147
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Logearse en java desde fichero de texto

Publicado por Yamil Bracho (2302 intervenciones) el 21/06/2019 17:16:55
la inea que lees del archivo es un String, que para java es un objecto (o tipo referencia, como te comente) .
Puedes refactoriza el codigo para algo como

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public int userExists(string user, string passw) {
    int tipo = 0;  // Usuario no encontrado
	String nombreFichero = "C://Users//ibai//Desktop/Usuarios.txt";
	File fichero = new File(nombreFichero);
 
	try {
	   if (fichero.exists()){
		  BufferedReader br = new BufferedReader(new FileReader(ficheo));
		  string usuario;
 
		  // 3 lineas por Usuario (No muy eficiente, mejor usar JSON)
		  // Usuario
		  // password
		  // Tipo
		  while ((usuario = br.readLine()) != null) {
			  string pass = br.readLine();
			  string tipoString = br.readLine();
 
			  if (usuario.equals(user) && pass.equals(passw)) {
				tipo = Integer.parseInt(tipoString);
				break;
			  }
		  }
		}
    } catch (Exception ex) {
	  ex.printStackTrace();
	}
	finally {
      if (fichero.exists()) {
	    fichero.close();
	  }
    }
 
    return tipo;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 22
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Logearse en java desde fichero de texto

Publicado por ibai (11 intervenciones) el 22/06/2019 16:23:52
La verdad que no entiendo del todo tu codigo pero bueno.
La variable tipo se refiere a si el usuario es administrador o usuario normal, para despues llevarlo a un menu ocn unas opciones u otro menu.
Te lo digo porque al no entenderlo del todo nose si hace lo que necesito. De todas formas gracias por tu atencion y la de los demas!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 22
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Logearse en java desde fichero de texto

Publicado por ibai (11 intervenciones) el 26/06/2019 18:19:37
Gracias a todos los que me ayudaron.
Comparto el proyecto ya finalizado para cualquiera que tenga la misma duda que pueda ayudarle.
Solo habia que escribir el usuario en una misma linea separado por un espacio o guion o lo que quieran y usar el metodo split() para convertir la linea en un array.
Solo faltan las clases usuario y producto que no tienen mas que los contrructores, getters y setters

Un saludo.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package finaldam;
 
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.io.PrintWriter;
import java.sql.SQLException;
import java.util.InputMismatchException;
import java.util.Scanner;
 
/**
 *
 * @author ibai
 */
public class FinalDam {
 
    /**
     * @param args the command line arguments
     */
 
    static Scanner sc = new Scanner(System.in);
 
    static Productos[] listProd= new Productos[100];
    static Usuarios[] listUser= new Usuarios[100];
    static int nUser;
    static int nProd;
 
    //var producto                  
    static String nombre = "Desconocido";
    static float peso = 0;
    static float precio = 0;
    //var usuario    
    static String User = "Desconocido";
    static String Pass = "Desconocido";
    static int tipo = 0;
 
    public static void main(String[] args) throws SQLException, IOException {
        // TODO code application logic here
        MenuPrincipal();
 
    }
    static void MenuPrincipal() throws SQLException, IOException{
        int opcion;
        Scanner teclado = new Scanner(System.in);
        do{
            do{
                System.out.println("Que quieres hacer \n");
                System.out.println("1. Login \n");
                System.out.println("2. Registrarse \n");
                System.out.println("3. Salir \n");
                opcion=teclado.nextInt();
            }while(opcion<1 || opcion>=4);
            switch (opcion){
                case 1:
                    System.out.println("Login");
                    login();
                    break;
                case 2:
                    System.out.println("Registrarse");
                    registrarse();
                    break;
                case 3:
                    System.out.println("Gracias por venir");
            }
        }while(opcion == 2);
    }
    static void registrarse() throws SQLException{
 
        int cierraWhile = 0;
        while(nUser<listUser.length && cierraWhile != 1){
            Usuarios U = new Usuarios();
            System.out.println("Introduzca sus datos. ");
            System.out.println("Nombre de usuario: ");
                User = sc.next();
            System.out.println("Contraseña (solo letras): ");
                Pass = sc.next();
                tipo = 2;
 
            U.setUser(User);
            U.setPass(Pass);
            U.setTipo(tipo);
            listUser[nUser]= U ;
            nUser++;
 
            if(nUser==listUser.length){
                System.out.println("Almacenamiento lleno.");
            }
 
            System.out.println("¿Quiere dejar de introducir usuarios? teclée: 1 =,0 = no.");
            cierraWhile = sc.nextInt();
        }
        //Guardar usuario
        System.out.println("Guardando el usuario en: Usuarios.txt");
        try{
            File nombreFichero = new File("Usuarios.txt");
            FileWriter fw = new FileWriter(nombreFichero,true);
            BufferedWriter bw = new BufferedWriter(fw);
            PrintWriter pw = new PrintWriter(bw);
 
            for (int i = 0; i < nUser; i++) {
                pw.println(listUser[i].getUser()+" "+listUser[i].getPass()+" "+listUser[i].getTipo());
            }pw.close();
 
        }catch(IOException ioe){
            System.out.println("No se ha podido guardar. Error: "+ ioe);
        }
    }
    static void login() throws SQLException, FileNotFoundException, IOException{
 
        System.out.println("Introduce tu usuario");
        String user = sc.next();
        System.out.println("Introduce tu pass");
        String pass = sc.next();
 
        String nombreFichero = "Usuarios.txt";
        File fichero = new File(nombreFichero);
 
        if(fichero.exists()){
 
            FileReader fr = new FileReader(nombreFichero);
            BufferedReader bf = new BufferedReader(fr);
 
            while ((nombreFichero = bf.readLine())!=null) {
                String[] datos = nombreFichero.split(" ");
 
                if (datos[0].equals(user) && datos[1].equals(pass)) {
                    System.out.println("Bienvenido: " + user);
                    switch (datos[2]){
                        case "1":
                            MenuAdmin();
                        break;
                        case "2":
                            MenuUsuario();
                        break;
                    }
                }else{
                    System.out.println("Usuario o contraseña incorrectos.");
                }
            }bf.close();
        }
    }
    static void MenuAdmin() throws SQLException, IOException{
        int opcion=0;
        Scanner teclado = new Scanner(System.in);
        do{
            do{
                System.out.println("1. Introducir Productos");
                System.out.println("2. Introducir nuevo administrador o usuario");
                System.out.println("3. Ver productos");
                System.out.println("4. Salir");
                opcion = teclado.nextInt();
            }while(opcion<0 || opcion>4);
            switch(opcion){
                case 1:
                    introduceProd();
                    break;
                case 2:
                    introduceAdmin();
                    break;
                case 3:
                    VerProductos();
            }
        }while(opcion !=4);
    }
    static void MenuUsuario() throws SQLException, IOException{
        int opcion=0;
        Scanner teclado = new Scanner(System.in);
        do{
            do{
                System.out.println("1. Ver productos");
                System.out.println("2. Salir");
                opcion = teclado.nextInt();
            }while(opcion<0 || opcion>2);
            switch(opcion){
                case 1:
                    VerProductos();
                    break;
            }
        }while(opcion !=2);
    }
    static void introduceProd() throws SQLException{
        int opcion=0;
        Scanner teclado = new Scanner(System.in);
 
        while(nProd<listProd.length && opcion != 1){
            Productos P = new Productos();
            System.out.println("Introduzca las variables del nuevo producto.");
 
                System.out.println("Nombre del producto");
                nombre = teclado.next();
 
            try{
                System.out.println("Precio:");
                precio = sc.nextFloat();
 
            }catch(InputMismatchException ime){
                System.out.println("¡Cuidado! Solo puedes insertar números decimales. " + ime);
                sc.next();
            }
 
            try{
                System.out.println("Peso:");
                peso = sc.nextFloat();
 
            }catch(InputMismatchException ime){
                System.out.println("¡Cuidado! Solo puedes insertar números decimales. " + ime);
                sc.next();
            }
 
            P.setNombre(nombre);
            P.setPrecio(precio);
            P.setPeso(peso);
 
            listProd[nProd]= P ;
            nProd++;
            //Guardar, escribir prodctos a txt
            System.out.println("Guardando los productos en: Productos.txt");
            try{
                File nombreFichero = new File("Productos.txt");
                FileWriter fw = new FileWriter(nombreFichero,true);
                BufferedWriter bw = new BufferedWriter(fw);
                PrintWriter pw = new PrintWriter(bw);
 
                    for (int i = 0; i < nProd; i++) {
                        pw.println("Nombre: ");     pw.println(listProd[i].getNombre());
                        pw.println("Precio: ");     pw.println(listProd[i].getPrecio());
                        pw.println("Peso: ");       pw.println(listProd[i].getPeso());
                        pw.println("-----------");
                    }pw.close();
 
            }catch(IOException ioe){
                System.out.println("No se ha podido guardar. Error: "+ ioe);
            }
 
            if(nProd==listProd.length){
                System.out.println("Almacenamiento lleno.");
            }
                System.out.println("¿Quiere dejar de introducir productos? teclée: 1 =,0 = no.");
                opcion = teclado.nextInt();
        }
    }
    static void introduceAdmin() throws SQLException{
        int opcion=0;
        int cierraWhile = 0;
 
        do{
            while(nUser<listUser.length && cierraWhile != 1){
                Usuarios U = new Usuarios();
                System.out.println("Introduzca los datos. ");
                System.out.println("Nombre del nuevo usuario: ");
                        User = sc.next();
                System.out.println("Contraseña (solo letras): ");
                        Pass = sc.next();
                try{
                    System.out.println("Nuevo administrador pulse 1, usuario normal pulse 2.");
                    tipo = sc.nextInt();
 
                }catch (InputMismatchException ime){
                    System.out.println("¡Cuidado! Solo puedes insertar números. "+ime);
                    sc.next();
                }
                U.setUser(User);
                U.setPass(Pass);
                U.setTipo(tipo);
                listUser[nUser]= U ;
                nUser++;
 
                if(nUser==listUser.length){
                    System.out.println("Almacenamiento lleno.");
                }
 
                System.out.println("¿Quiere dejar de introducir usuarios? teclée: 1 =,0 = no.");
                cierraWhile = sc.nextInt();
            }
            //Guardar,escribir usuario
            System.out.println("Guardando el usuario en: Usuarios.txt");
            try{
                File nombreFichero = new File("Usuarios.txt");
                FileWriter fw = new FileWriter(nombreFichero,true);
                BufferedWriter bw = new BufferedWriter(fw);
                PrintWriter pw = new PrintWriter(bw);
 
                for (int i = 0; i < nUser; i++) {
                    pw.println(listUser[i].getUser()+" "+listUser[i].getPass()+" "+listUser[i].getTipo());
 
                }pw.close();
 
            }catch(IOException ioe){
                System.out.println("No se ha podido guardar. Error: "+ ioe);
            }
        }while(opcion==1);
    }
    static void VerProductos() throws SQLException, FileNotFoundException, IOException{
 
        String nombreFichero = "Productos.txt";    //Cambiar ruta entre comillas
        File fichero = new File(nombreFichero);
 
        if(fichero.exists()){
 
            FileReader fr = new FileReader(nombreFichero);
            BufferedReader bf = new BufferedReader(fr);
 
            while ((nombreFichero = bf.readLine())!=null) {
               System.out.println(nombreFichero);
            }bf.close();
 
        }else{
            System.out.println("Aún no se ha guardado ningún producto. "
                    + "Vuelva a la opción 1 y guarde algún producto para ejecutar esta función.");
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar