Java, что использовать вместо PrintStream для получения исключений?
Я создаю файл на сетевом диске и затем добавляю к нему данные. Время от времени запись в этот файл не удается. Есть ли хороший способ проверить, доступен ли файл перед каждым моим сохранением данных, или, может быть, есть способ проверить, были ли данные сохранены?
РЕДАКТИРОВАТЬ: Прямо сейчас я использую блок try-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 никогда не генерируют исключения IOException)
2 ответа
Я бы использовал обычный BufferedWriter и сам добавлял новые строки при необходимости.
Обычные операции FileOutputStream должны генерировать IOException, если есть ошибка.
AFAIK, единственным исключением является PrintWriter, который не выдает исключение. Вместо этого вам нужно вызвать checkError(), но он не дает никаких указаний на то, что это была за ошибка или когда она произошла.
Я предлагаю вам не использовать PrintWriter в этой ситуации.
Единственный разумный способ решить эту проблему - попытаться записать файл и обработать любое возникающее исключение соответствующим образом. В значительной степени невозможно заранее знать, будет ли операция ввода-вывода успешной из-за ненадежной природы сетей.