Запись Java в удаленный файл

Я использую FileWriter для записи в файл и заметил, что даже после того, как я удалил файл (вне процесса), FileWriter не генерирует никаких исключений.

Это нормально?

Ответ 1

Это зависит от вашей операционной системы:

  • В Windows вы обычно не сможете удалить открытый файл.
  • В Unix удаление открытого файла и продолжение записи в него (или чтение из него) вполне приемлемо. Как только вы удалите файл, он больше не будет иметь запись в каталоге. Однако его содержимое будет продолжать существовать на диске, пока файл не будет закрыт. Когда все открытые дескрипторы, относящиеся к файлу, будут закрыты, ОС автоматически восстановит дисковое пространство.

Ответ 2

Да, это нормально. Используя большинство обычных способов ввода-вывода, если файл не существует, он создает его для вас. Это, конечно, ожидает, что вы удалили его, прежде чем вы начали писать.

Ответ 3

Файл может появляться в нескольких местах (с жесткими ссылками). Удаление файла удаляет одну из жестких ссылок (возможно, только). Если есть ссылка где-то в другом месте, файл по-прежнему доступен.

Файлы, которые удаляются, но открываются, продолжают занимать дисковое пространство, и если достаточно большой объем может означать ваше пространство, и размер всех файлов, которые вы можете найти на вашем диске, отличается.

BTW: вы можете прочитать/записать содержимое открытого файла (удалено или нет), если вы посмотрите в /proc/{pid}/fd/{fid}