读入inputstream后删除文件

时间:2018-01-25 11:11:11

标签: java inputstream

我正在尝试从本地存储的文件中检索视频流。在读入输入流后,我试图删除该文件,但它不允许这种情况发生。我知道我需要关闭流,但我需要将此流传递给Web服务器调用。关于如何最好地解决这个问题的任何想法:

InputStream is = new FileInputStream("\\Location\\file.txt");
File f = new File("\\Location\\file.txt");

             if(f.delete()) {
                System.out.println("success");
             } else {
                System.out.println("failure");
             }  

2 个答案:

答案 0 :(得分:2)

在Finally块上尝试删除

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

class DeleteFile extends FileInputStream {

  File file;

  public DeleteFile(String s) throws FileNotFoundException {
    this(new File(s));
  }

  public DeleteFile(File file) throws FileNotFoundException {
    super(file);
    this.file = file;
  }

  public void close() throws IOException {
    try {
      super.close();
    } finally {
      if (file != null) {
        file.delete();
        file = null;
      }
    }
  }
}

答案 1 :(得分:1)

以下是您的构造函数委托给的构造函数FileInputStream(File file)中发生的事情:

public FileInputStream(File file) throws FileNotFoundException {
   //some checks of file objects omitted here
   fd = new FileDescriptor();
   fd.attach(this);
   open(name);    //native method opening the file for reading
}

调用FileInputStream.close()会释放在构造函数中创建的文件描述符,并调用native方法来关闭打开的文件。

致电close()后,您将可以删除该文件。

请参阅source here