2012-04-23 2 views
1

Я использую FileOutputStream fos для создания/добавления и записи в отладочный файл в отдельном потоке:FileOutputStream write не вызывает исключение, когда файл был удален?

fos = new FileOutputStream(outputFile, true); 
    if (!outputFile.exists()) { 
    outputFile.createNewFile(); 
    } 
    fos.write(string.getBytes()); 

Этот код продолжает неоспоримым вызывается в цикле, пока пользователь может очистить = удалить файл в любое время из другого потока, чтобы начать запись заново отладочной информации.

Теперь я действительно удивлен, что, когда файл удален, этот код проходит без каких-либо исключений, НО ничего не происходит. т.е. файл не воссоздается, и ничего не написано. Все «записи» просто потеряны.

Должен ли я постоянно проверять вручную, был ли файл удален в то же время сам, прежде чем звонить fos.write каждый раз?

Если исключение будет работать, как ожидалось, то есть при записи в удаленный файл было бы проще и чище.

ответ

4

Это полностью зависит от ОС. В Windows вы не будете в состоянии, чтобы удалить файл; но в UNIX-подобных системах это именно то, как это работает, независимо от языка программирования. Учитывая, что файл может иметь несколько ссылок, которые могут быть удалены независимо, вы должны понять, почему это поведение имеет смысл. И это факт, это приводит к более легкому и более чистому поведению, чем к взрыву при удалении файла.

+0

Благодарим вас за четкий ответ - однако я не уверен, что действительно согласен «И это факт, это приводит к более простому и более чистому поведению, чем к взрыву при удалении файла». Наличие чистого исключения для обработки этого случая на самом деле не «взрывается». Тем не менее - спасибо за это, поэтому я должен проверить, существует ли файл перед каждой записью в файл. Я правильно понял тебя? – user387184

+0

@ user387184 Попытка разработки Windows иногда ... и вам понравится * IX семантика файловой системы ;-) Так или иначе, не проверяйте перед записью. Только на открытом (который «встроен» в зависимости от режима). Если кто-то отменит файл («удаляет его»), мы надеемся, что у них есть причина ... лучший способ «очистить» файл - это, возможно, усечение. –

+0

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

Смежные вопросы