Java, что использовать вместо PrintStream для получения исключений? - PullRequest
0 голосов
/ 04 мая 2011

Я создаю файл на сетевом диске и затем добавляю к нему данные.Время от времени запись в этот файл не удается.Есть ли хороший способ проверить, доступен ли файл перед каждым разом, когда я сохраняю в него данные, или, может быть, есть способ проверить, сохранены ли данные?

РЕДАКТИРОВАТЬ: Прямо сейчас я использую попытку-catch блок с PrintStream в моем коде:

        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());
        }

Так может ли быть PrintStream проблема?( PrintWriter и PrintStream никогда не генерируют IOExceptions )

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

Я бы использовал обычный BufferedWriter и сам добавлял новые строки при необходимости.


Обычные операции FileOutputStream должны выдавать IOException, если есть ошибка.

AFAIK, единственным исключением является PrintWriter, который не выдает исключение. Вместо этого вам нужно вызвать checkError (), но он не дает никаких сведений о том, что это была за ошибка или когда она произошла.

Я предлагаю вам не использовать PrintWriter в этой ситуации.

1 голос
/ 04 мая 2011

Единственный разумный способ решить эту проблему - попытаться записать в файл и соответствующим образом обработать любое возникающее исключение.В значительной степени невозможно заранее знать, будет ли операция ввода / вывода успешной из-за ненадежной природы сетей.

...