我正在编写一个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();
答案 0 :(得分:1)
这意味着文件上至少还有一个打开的文件句柄。当最后一个句柄关闭后,隐藏文件将被删除。
您说它们在您杀死服务器时会消失,因此您的服务器仍然至少有一个句柄打开该文件。您可以使用lsof
命令来证明确实是您的服务器具有打开的句柄。
在成功和异常情况下,仔细检查您是否正在关闭java中文件的所有打开流。