Я использую FileWriter для записи в файл и заметил, что даже после того, как я удалил файл (вне процесса), FileWriter не генерирует никаких исключений.
Это нормально?
Ответ 1
Это зависит от вашей операционной системы:
В Windows вы обычно не сможете удалить открытый файл.
В Unix удаление открытого файла и продолжение записи в него (или чтение из него) вполне приемлемо. Как только вы удалите файл, он больше не будет иметь запись в каталоге. Однако его содержимое будет продолжать существовать на диске, пока файл не будет закрыт. Когда все открытые дескрипторы, относящиеся к файлу, будут закрыты, ОС автоматически восстановит дисковое пространство.
Ответ 2
Да, это нормально. Используя большинство обычных способов ввода-вывода, если файл не существует, он создает его для вас. Это, конечно, ожидает, что вы удалили его, прежде чем вы начали писать.
Ответ 3
Файл может появляться в нескольких местах (с жесткими ссылками). Удаление файла удаляет одну из жестких ссылок (возможно, только). Если есть ссылка где-то в другом месте, файл по-прежнему доступен.
Файлы, которые удаляются, но открываются, продолжают занимать дисковое пространство, и если достаточно большой объем может означать ваше пространство, и размер всех файлов, которые вы можете найти на вашем диске, отличается.
BTW: вы можете прочитать/записать содержимое открытого файла (удалено или нет), если вы посмотрите в /proc/{pid}/fd/{fid}