Bei dem Versuch, eine Datei zu löschen, nachdem FileOutputStream zum Schreiben von Inhalten verwendet wurde, gibt die Methode file.delete() trotz Überprüfung „false“ zurück Dateiexistenz und -zugänglichkeit über file.exists(), file.canRead(), file.canWrite() und file.canExecute(). Dieses Verhalten kann auf einen besonderen Fehler in Java zurückgeführt werden.
Die Methode writeContent() wird korrekt verwendet, um Inhalte in die Datei zu schreiben und den Stream zu schließen. Der Versuch, eine Datei zu löschen, schlägt jedoch fehl, da ein Verweis auf die Datei durch die Java Virtual Machine (JVM) bestehen bleibt. Um dieses Problem zu beheben, muss System.gc() vor dem Löschversuch aufgerufen werden. Dadurch wird die JVM gezwungen, eine Garbage Collection durchzuführen, den Verweis auf die Datei freizugeben und deren Löschung zu ermöglichen.
Der überarbeitete Code mit hinzugefügtem System.gc() umfasst Folgendes:
finally { try { in.close(); in = null; out.flush(); out.close(); out = null; System.gc(); } catch (IOException e) { logger.error(e.getMessage()); e.printStackTrace(); } }
Durch Aufrufen von System .gc() im final-Block wird der Verweis auf die Datei entfernt, sodass file.delete() die Datei erfolgreich löschen kann.
Das obige ist der detaillierte Inhalt vonWarum schlägt „file.delete()' trotz Prüfung der Dateizugänglichkeit fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!