FileOutputStream を使用してコンテンツを書き込んだ後にファイルを削除しようとすると、検証したにもかかわらず file.delete() メソッドが false を返します。ファイルの存在と、file.exists()、file.canRead()、file.canWrite()、および file.canExecute() によるアクセス可能性。この動作は、Java 特有のバグに起因する可能性があります。
writeContent() メソッドは、コンテンツをファイルに書き込み、ストリームを閉じるために正しく利用されています。ただし、ファイルの削除を試みると、Java 仮想マシン (JVM) によるファイルへの参照が持続するため、削除に失敗します。この問題に対処するには、削除を試みる前に System.gc() を呼び出す必要があります。これにより、JVM は強制的にガベージ コレクションを実行し、ファイルへの参照が解放され、ファイルの削除が可能になります。
System.gc() が追加された修正コードには次のものが含まれます。
finally { try { in.close(); in = null; out.flush(); out.close(); out = null; System.gc(); } catch (IOException e) { logger.error(e.getMessage()); e.printStackTrace(); } }
System を呼び出すことによりfinally ブロックの .gc() により、ファイルへの参照が削除され、file.delete() がファイルを正常に削除できるようになります。
以上がファイルのアクセシビリティチェックにもかかわらず「file.delete()」が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。