Java - Error al crear .txt desde .jar

 
Vista:
Imágen de perfil de Diego
Val: 19
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Error al crear .txt desde .jar

Publicado por Diego (14 intervenciones) el 25/11/2020 20:06:06
Hola estimados amigos, quizás me puede ayudar con el siguiente problemita. He hecho un programita en Java con Netbeans 11. Al ejecutarlo el programa crea un .txt y en el guarda las horas del sistema según el usuario presiona un botón. Por otro lado, con otro botón lee la información del .txt creado anteriormente y hace un cálculo con esos datos.

La cuestión es que todo funciona bien cuando lo ejecuto desde en netbeans, se crean los archivos (en la carpeta del proyecto), se leen, etc.

Tengo que enviar el proyecto para que sea revisado por el profesor y por eso creé un .jar . La cuestión es que el .jar se ejecuta en mi máquina (con el netbeans cerrado) pero no crea el .txt . Si yo lo creo adrede, tampoco lo lee, y no sé donde está el fallo, estoy tratando de hacerlo .exe pero aún no lo consigo (aunque no se si así funcione) así que con que funcione el .jar me es suficiente pero no sé dónde está el problema.

Muchas gracias por si alguien sabe como solucionar esto. Dejo unas imágenes y las líneas del código que creo necesitan ver. Salu2.-

Así es la estuctura de archivos:

1

Esto crea el .txt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void CREARActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
 
    try {
 
        File archivo = new File(ID_usuario.getText() + ".txt");
        System.out.println(archivo);
        if (!archivo.exists()) {
            FileWriter escribir = new FileWriter(archivo, true);
            escribir.close();
            JOptionPane.showMessageDialog(null, "Usuario creado correctamente.", "CORRECTO",-1);
            this.setVisible(false);
        } else {
            JOptionPane.showMessageDialog(null, "Usuario ya existe.", "ERROR", 0);
        }
 
    } //Si existe un problema al escribir cae aqui
    catch (Exception e) {
        System.out.println("Error al escribir");
    }
}

Así escribo en el .txt:

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
try {
 
    File archivouno = new File(ID_Fichaje.getText() + ".txt");
 
    if (!archivouno.exists()) {
        JOptionPane.showMessageDialog(null, "Usuario no existe.", "ERROR", 0);
    } else {
 
        //Lee la hora del sistema
        Calendar calendario = Calendar.getInstance();
        calendario = new GregorianCalendar();
        int hora, minutos;
        hora = calendario.get(Calendar.HOUR_OF_DAY);
        minutos = calendario.get(Calendar.MINUTE);
        System.out.println(hora + ":" + minutos);
 
        String saludo = (hora + ":" + minutos + "\n");
 
        try {
            //Crear un objeto File se encarga de crear o abrir acceso a un archivo que se especifica en su constructor
            File archivo = new File(ID_Fichaje.getText() + ".txt");
 
            //Crear objeto FileWriter que sera el que nos ayude a escribir sobre archivo
            FileWriter escribir = new FileWriter(archivo, true);
 
            //Escribimos en el archivo con el metodo write
            escribir.write(saludo);
 
            //Cerramos la conexion
            escribir.close();
        } //Si existe un problema al escribir cae aqui
        catch (IOException e) {
            System.out.println("Error al escribir");
        }
        JOptionPane.showMessageDialog(null, "Fichaje correcto.", "CORRECTO", -1);
    }
 
} //Si existe un problema al escribir cae aqui
catch (HeadlessException e) {
    System.out.println("Error al escribir");
}

Y así leo el .txt:

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
private void HorasActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
 
    if ("dferazo".equals(ID_Administrador.getText())) {
        String fichero = ID_User.getText() + ".txt";
 
        File f = new File(fichero);
        System.out.println(fichero);
 
        if (!f.exists()) {
            JOptionPane.showMessageDialog(null, "Usuario no existe.", "ERROR", 0);
        } else {
 
            FileReader fr = null;
            try {
                fr = new FileReader(fichero);
 
            } catch (FileNotFoundException ex) {
                Logger.getLogger(Fichaje.class.getName()).log(Level.SEVERE, null, ex);
            }
 
            BufferedReader br = new BufferedReader(fr);
            //System.out.println(fichero);
 
            //Cuenta el número de líneas del txt
            String linea;
            int cont = 0;
            try {
                while ((linea = br.readLine()) != null) {
                    cont++;
                }
            } catch (IOException ex) {
                Logger.getLogger(Fichaje.class.getName()).log(Level.SEVERE, null, ex);
            }
            //System.out.println(cont);
// y empiezan los cálculos..........

Muchas gracias de antemano. Por cierto al crear el .jar se crea dentro de la carpeta dist y solo se crea el .jar y un readme.txt........... entiendo que debería crearse una carpeta lib, pero lo he hecho mil veces y eso no se crea.
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

Error al crear .txt desde .jar

Publicado por Tom (1831 intervenciones) el 26/11/2020 08:50:41
El código no parece estar "muy fino" pero si funciona en netbeans debería funcionar fuera.
¿ No aparece ningún mensaje de excepciones y así cuando lo ejecutas ?
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
Imágen de perfil de Diego
Val: 19
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Error al crear .txt desde .jar

Publicado por Diego (14 intervenciones) el 14/12/2020 22:36:26
Gracias, trataré de mejorarlo. al final funcionó no se cómo porque no hice nada más. solamente un día funcionó. 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