尝试删除后临时文件保留在 linux

Temporary files stays in linux after an attempt to delete

我正在编写一个 java servlet,它从客户端下载文件并将其移动到某个特定位置。移动后我删除下载的文件。有时 linux 创建 .fuse_hidden______ 命名文件。他们一直呆在那里,直到我重新启动我的服务器进程。下载后我会关闭所有打开的流。它通常发生在已安装的 USB 闪存驱动器上。

这是我的代码片段

    try{
           ...
           inputStream = new RandomAccessFile(new File(sourcePath), "r");
           inputChannel = inputStream.getChannel();
           ....
        }
    finally{
           inputChannel.close(); 
           inputStream .close();
       }
    new File(sourcePath).delete();

表示该文件至少还有一个打开的文件句柄。当最后一个句柄关闭后,隐藏文件将被删除。

你说当你杀死你的服务器时它们就消失了,因此你的服务器仍然至少有一个打开文件的句柄。你可以用lsof命令来证明打开句柄确实是你的服务器

非常仔细地检查您在 java 中是否在成功和异常情况下都关闭了文件的所有打开流。