0

我正在为一个课程编写一个程序,该程序涉及创建一个临时音频文件,从中读取数据,然后将其删除。我一切正常,除了删除文件。当我尝试删除文件时,file.delete()返回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类似的结果中。

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

4

1 回答 1

-1

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

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

Files 是来自 nio 的类

import java.nio.file.Files;

于 2017-12-01T08:41:31.590 回答