Java 删除源文件时仍可以读取FileInputStream

Java 删除源文件时仍可以读取FileInputStream,java,android,file-upload,file-io,locked-files,Java,Android,File Upload,File Io,Locked Files,我在android中遇到了一个非常奇怪的问题: 在我的应用程序中,我将从缓存目录上载文件。如果用户在我的应用程序上载文件时使用cleanmaster等更干净的应用程序清除我的应用程序的缓存目录,则所有文件都会被删除,但上载任务不会停止,稍后将成功完成,而不会丢失任何数据。此外,虽然这些无源文件任务仍在上载, 我无法再访问缓存目录,例如,如果我想在缓存目录中创建一个新文件,我会收到“ebusy”错误 我的应用程序在上传任务中使用FileInputStream打开、读取数据表单文件,如下所示: In

我在android中遇到了一个非常奇怪的问题:

在我的应用程序中,我将从缓存目录上载文件。如果用户在我的应用程序上载文件时使用cleanmaster等更干净的应用程序清除我的应用程序的缓存目录,则所有文件都会被删除,但上载任务不会停止,稍后将成功完成,而不会丢失任何数据。此外,虽然这些无源文件任务仍在上载, 我无法再访问缓存目录,例如,如果我想在缓存目录中创建一个新文件,我会收到“ebusy”错误

我的应用程序在上传任务中使用FileInputStream打开、读取数据表单文件,如下所示:

InputSream in = new FileInputStream(file);
byte[] buffer = new byte[4 * 1024];
int bytes;
while ((bytes = in.read(buffer)) != -1) {
    netOutputStream.write(buffer, 0, bytes);
}
in.close();
我假设系统在通过FileInputStream打开文件时缓存了该文件,如何禁用缓存?我想要的是:如果文件被删除,读取流抛出错误,我的上传任务停止

我的问题是:

为什么在删除源文件时仍可以读取FileInputsReal 为什么缓存目录被谁锁定? 我的案子有什么解决办法吗?
这些文件有多大?当你运行清洁器时,任务可能已经完成了app@jaytj95平均大小是20MB,我确信在清理了进度日志后,文件仍在上传。这就是Unix和Linux的行为。删除一个文件实际上是从目录中删除它的名称:inode和数据在任何进程打开它时都会保持不变。@谢谢EJP,所以这意味着在所有打开句柄关闭之前,文件实际上不会被删除?但是为什么目录被锁定?