尝试删除后临时文件保留在 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 中是否在成功和异常情况下都关闭了文件的所有打开流。
我正在编写一个 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 中是否在成功和异常情况下都关闭了文件的所有打开流。