es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

EOF no funciona en archivos de datos para guardar valores.

public static void main(String[] args) throws IOException {
    InputStream istream;        
    int c;
    final int EOF = -1;
    istream = System.in; 
    FileWriter outFile =  new FileWriter("C:/Users/boamb/Documents/NetBeansProjects/DSA_BSE20BFT/src/week7/Data.txt",true);
    BufferedWriter bWriter = new BufferedWriter(outFile);
    System.out.println("Ingrese las frutas para almacenar en el archivo de datos - Presione Ctrl+Z para finalizar ");  
    while ((c = istream.read()) != EOF)
    bWriter.write(c);
    bWriter.close();
    }

Hola a todos, estoy tratando de insertar datos en un archivo a través de la salida del sistema en el IDE de NETBEANS, pero el problema es que cuando presiono CTRL + Z no funciona, el programa sigue funcionando y cuando lo detengo manualmente no hay datos guardados en el archivo. Este es mi código.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código mostrado arriba utiliza InputStream para leer datos desde la entrada del sistema y BufferedWriter para escribir los datos en un archivo llamado “Data.txt”. El programa está diseñado para obtener entrada del usuario hasta que se detecte el carácter de fin del archivo (EOF) (Ctrl + Z). Sin embargo, parece que el programa no se está terminando como se espera después de recibir el carácter EOF y los datos no se están guardando en el archivo.

    Para solucionar este problema, podemos modificar la condición del bucle mientras para verificar si el valor de “c” es igual al carácter EOF o no. Podemos hacer esto utilizando la constante EOF (-1) que se define al comienzo del programa. Por lo tanto, la condición del bucle while modificado sería:

    while ((c = istream.read()) != EOF && c != ‘\n’)

    Aquí, estamos comprobando tanto el carácter EOF como el carácter de nueva línea (\n) porque a veces el sistema operativo puede enviar un carácter de nueva línea después del carácter EOF.

    Además, también podemos agregar un bloque try-catch para manejar cualquier excepción que pueda ocurrir durante el proceso de escritura de archivos. Aquí está el código modificado con los cambios:

    public static void main(String[] args) {
        InputStream istream;        
        int c;
        final int EOF = -1;
        istream = System.in; 
        FileWriter outFile;
        try {
            outFile =  new FileWriter("C:/Users/boamb/Documents/NetBeansProjects/DSA_BSE20BFT/src/week7/Data.txt",true);
            BufferedWriter bWriter = new BufferedWriter(outFile);
            System.out.println("Ingrese frutas para almacenar en el archivo de datos - Presione Ctrl + Z para finalizar");    
            while ((c = istream.read()) != EOF && c != '\n') {
                bWriter.write(c);
            }
            bWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    En este código modificado, hemos agregado un bloque try-catch alrededor del código que abre y escribe en el archivo. Esto manejará cualquier excepción que pueda ocurrir durante este proceso e imprimirá la huella de la pila en la consola.

    Esperamos que esto ayude a resolver el problema con la escritura de datos en el archivo en el entorno de desarrollo integrado NETBEANS.

Comments are closed.