FileNotFoundException di Java

1. Perkenalan

Pada artikel ini, kita akan berbicara tentang pengecualian yang sangat umum di Java - FileNotFoundException .

Kami akan membahas kasus-kasus ketika itu dapat terjadi, cara-cara yang mungkin untuk mengobatinya dan beberapa contoh.

2. Kapan Pengecualian Dilempar?

Seperti yang ditunjukkan pada dokumentasi API Java, pengecualian ini dapat diterapkan ketika:

  • Sebuah file dengan nama path yang ditentukan tidak tidak ada
  • File dengan nama jalur yang ditentukan memang ada, tetapi tidak dapat diakses karena beberapa alasan (permintaan menulis untuk file hanya-baca, atau izin tidak mengizinkan mengakses file)

3. Bagaimana Menanganinya?

Pertama-tama, dengan mempertimbangkan bahwa ia memperluas java.io.IOException yang memperluas java.lang.Exception , Anda perlu mengatasinya dengan blok coba-tangkap seperti halnya E xception yang diperiksa lainnya .

Kemudian, apa yang harus dilakukan (terkait bisnis / logika) di dalam blok coba-tangkap sebenarnya tergantung pada apa yang perlu Anda lakukan.

Anda mungkin perlu:

  • Tingkatkan pengecualian khusus bisnis: ini mungkin kesalahan penghentian eksekusi, tetapi Anda akan membiarkan keputusan di lapisan atas aplikasi (jangan lupa untuk menyertakan pengecualian asli)
  • Peringatkan pengguna dengan dialog atau pesan kesalahan: ini bukan kesalahan penghentian eksekusi, jadi memberi tahu saja sudah cukup
  • Buat file: membaca file konfigurasi opsional, tidak menemukannya dan membuat yang baru dengan nilai default
  • Buat file di jalur lain: Anda perlu menulis sesuatu dan jika jalur pertama tidak tersedia, Anda mencoba dengan yang gagal-aman
  • Cukup catat kesalahan: kesalahan ini seharusnya tidak menghentikan eksekusi tetapi Anda mencatatnya untuk analisis selanjutnya

4. Contoh

Sekarang kita akan melihat beberapa contoh, yang semuanya akan didasarkan pada kelas pengujian berikut:

public class FileNotFoundExceptionTest { private static final Logger LOG = Logger.getLogger(FileNotFoundExceptionTest.class); private String fileName = Double.toString(Math.random()); protected void readFailingFile() throws IOException { BufferedReader rd = new BufferedReader(new FileReader(new File(fileName))); rd.readLine(); // no need to close file } class BusinessException extends RuntimeException { public BusinessException(String string, FileNotFoundException ex) { super(string, ex); } } }

4.1. Mencatat Pengecualian

Jika Anda menjalankan kode berikut, itu akan "mencatat" kesalahan di konsol:

@Test public void logError() throws IOException { try { readFailingFile(); } catch (FileNotFoundException ex) { LOG.error("Optional file " + fileName + " was not found.", ex); } }

4.2. Meningkatkan Pengecualian Khusus Bisnis

Berikutnya, contoh memunculkan pengecualian khusus bisnis sehingga kesalahan dapat ditangani di lapisan atas:

@Test(expected = BusinessException.class) public void raiseBusinessSpecificException() throws IOException { try { readFailingFile(); } catch (FileNotFoundException ex) { throw new BusinessException( "BusinessException: necessary file was not present.", ex); } }

4.3. Membuat File

Terakhir, kami akan mencoba membuat file agar dapat dibaca (mungkin untuk utas yang terus membaca file), tetapi sekali lagi menangkap pengecualian dan menangani kemungkinan kesalahan kedua:

@Test public void createFile() throws IOException { try { readFailingFile(); } catch (FileNotFoundException ex) { try { new File(fileName).createNewFile(); readFailingFile(); } catch (IOException ioe) { throw new RuntimeException( "BusinessException: even creation is not possible.", ioe); } } }

5. Kesimpulan

Dalam artikel singkat ini, kita telah melihat ketika FileNotFoundException dapat terjadi dan beberapa opsi untuk menanganinya.

Seperti biasa, contoh lengkapnya ada di Github.