从文件创建 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;
我正在为 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
的 classimport java.nio.file.Files;