Pregunta

Estoy creando un archivo en una unidad de red y luego agregando datos.De vez en cuando, la escritura en ese archivo falla.¿Existe una buena manera de verificar si el archivo es accesible antes cada vez que guardo datos en él o tal vez hay una forma de verificar después para ver si los datos se guardaron?

EDITAR: En este momento estoy usando el bloque try-catch con PrintStream en mi código:

        try
        {
            logfile = new File(new File(isic_log), "log_" + production);
            //nasty workaround - we'll have a file the moment we assign an output stream to it
            if (!logfile.exists())
            {
                    prodrow = production;
            }

            out = new FileOutputStream(logfile.getPath(), logfile.exists());
            p = new PrintStream(out);
            if (prodrow != "")
            {
                p.println (prodrow);
            }
            p.println (chip_code + ":" + isic_number);
            p.close();
        }
        catch (Exception e)
        {
                logger.info("Got exception while writing to isic production log: " + e.getMessage());
        }

Entonces, ¿podría ser PrintStream el problema?( PrintWriter y PrintStream nunca arrojan IOExceptions )

¿Fue útil?

Solución

Usaría BufferedWriter simple y agregaría las nuevas líneas yo mismo según sea necesario.


Las operaciones normales de FileOutputStream deberían generar una IOException si hay un error.

AFAIK, la única excepción es PrintWriter que no lanza una excepción.En su lugar, debe llamar a checkError () pero no le da ninguna indicación de cuál fue el error o cuándo ocurrió.

Le sugiero que no utilice PrintWriter en esta situación.

Otros consejos

La única forma razonable de abordar esto es intentar escribir en el archivo y manejar cualquier excepción resultante de una manera adecuada.Es prácticamente imposible saber de antemano si una operación de E / S tendrá éxito, debido a la naturaleza poco confiable de las redes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top