Saya sedang mengerjakan program untuk kelas yang melibatkan pembuatan file audio sementara, membaca data darinya, dan kemudian menghapusnya. Saya memiliki semuanya berfungsi, kecuali menghapus file. Ketika saya mencoba untuk menghapus file, file.delete() mengembalikan false. Saya mencoba mencari tahu apa yang salah dengan menggunakan File java.nio, dan itu mengembalikan bahwa proses lain membuka file. Setelah melihat kode saya, saya mempersempitnya menjadi AudioInputStream yang menahan file tetap terbuka. Saya dapat menghapus file dengan baik sebelum saya membuat AudioInputStream, namun file tersebut tidak dapat dihapus setelah dibuat, meskipun saya menutup aliran sebelum mencoba menghapus file.

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());
    }
}

Saya juga telah mencoba menempatkan audioInputStream.close() setelah tangkapan dan bukan dalam finally dengan hasil yang serupa.

Mengapa inputstream menjaga file tetap terbuka setelah ditutup?

0
weberer 1 Desember 2017, 07:48

1 menjawab

Jawaban Terbaik

Ini akan berfungsi jika Anda dibungkus oleh BufferedInputStream

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

File adalah kelas dari nio

import java.nio.file.Files;

-1
borino 1 Desember 2017, 08:41