删除源文件时仍可读取FileInputStream

时间:2014-07-23 13:04:06

标签: java android file-upload file-io locked-files

我在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打开时缓存了文件,如何禁用缓存?我想要的是:如果文件被删除,则从流抛出错误读取并且我的上传任务停止。

我的问题:

  1. 为什么在删除源文件时仍可以读取FileInputSream
  2. 为什么缓存目录被谁锁定?
  3. 我案子的任何解决方案?

0 个答案:

没有答案