Dalam percubaan untuk memadam fail selepas menggunakan FileOutputStream untuk menulis kandungan, kaedah file.delete() mengembalikan palsu walaupun mengesahkan kewujudan dan kebolehcapaian fail melalui file.exists(), file.canRead(), file.canWrite(), dan file.canExecute(). Tingkah laku ini boleh dikaitkan dengan pepijat pelik dalam Java.
Kaedah writeContent() digunakan dengan betul untuk menulis kandungan pada fail dan menutup strim. Walau bagaimanapun, apabila cuba pemadaman fail, ia gagal kerana kegigihan rujukan kepada fail oleh Java Virtual Machine (JVM). Untuk menangani isu ini, System.gc() mesti digunakan sebelum cuba pemadaman. Ini memaksa JVM untuk melakukan pengumpulan sampah, melepaskan rujukan kepada fail dan mendayakan pemadamannya.
Kod yang disemak dengan System.gc() ditambah termasuk:
finally { try { in.close(); in = null; out.flush(); out.close(); out = null; System.gc(); } catch (IOException e) { logger.error(e.getMessage()); e.printStackTrace(); } }
Dengan menggunakan Sistem .gc() dalam blok akhirnya, rujukan kepada fail dialih keluar, membenarkan file.delete() berjaya memadamkan fail.
Atas ialah kandungan terperinci Mengapa `file.delete()` Gagal Walaupun Pemeriksaan Kebolehcapaian Fail?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!