从文件创建 AudioInputStream 后无法删除文件

Can't delete file after creating AudioInputStream from the file

我正在为 class 开发一个程序,该程序涉及创建一个临时音频文件、从中读取数据,然后将其删除。除了删除文件外,我一切正常。当我尝试删除文件时,file.delete() returns false。我试图使用 java.nio 文件找出到底出了什么问题,结果返回另一个进程打开了该文件。查看我的代码后,我将其缩小到 AudioInputStream 保持文件打开。我可以在创建 AudioInputStream 之前很好地删除文件,但是在创建文件后无法删除文件,尽管我在尝试删除文件之前关闭了流。

if (file != null && file.isFile())
{
    try
    {
       audioInputStream = null;
       try
       {
          audioInputStream = AudioSystem.getAudioInputStream(file);
       }  
       catch (Exception e)
       {
           System.out.println(e);
       }
       finally
       {
          audioInputStream.close();
       }    
       System.out.println("Attempted to delete wav file. Succesfull = " + file.delete());
    }
}

我也试过将 audioInputStream.close() 放在 catch 之后,而不是放在 finally 中,结果相似。

为什么输入流在文件关闭后保持打开状态?

如果你用 BufferedInputStream 包装它应该可以工作

audioInputStream = AudioSystem.getAudioInputStream(new BufferedInputStream(Files.newInputStream(file.toPath())));

Files 是来自 nio

的 class

import java.nio.file.Files;