Временные файлы остаются в Linux после попытки удаления
Я пишу Java-сервлет, который загружает файл с клиента и перемещает его в определенное место. После переезда удаляю скачанный файл. Иногда linux создает.fuse_hidden ______ именованные файлы. Они остаются там, пока я не перезапущу свой серверный процесс. После загрузки я закрываю все открытые потоки. Обычно это происходит на подключенных USB-накопителях.
Вот мой фрагмент кода
try{
...
inputStream = new RandomAccessFile(new File(sourcePath), "r");
inputChannel = inputStream.getChannel();
....
}
finally{
inputChannel.close();
inputStream .close();
}
new File(sourcePath).delete();
1 ответ
Это означает, что в файле все еще есть хотя бы один дескриптор открытого файла. Когда последний дескриптор был закрыт, скрытый файл будет удален.
Вы говорите, что они исчезают, когда вы убиваете свой сервер, поэтому на вашем сервере все еще есть хотя бы один дескриптор, открытый для файла. Вы можете использовать lsof
Команда, чтобы доказать, что это действительно ваш сервер, который имеет открытый дескриптор.
Очень тщательно проверяйте, что вы закрываете все открытые потоки для файла в Java как в случае успеха, так и в случае исключения.