Hat jemals jemand eine Ausnahme beim Aufruf der Methode close auf einem schließbaren Objekt angezeigt?Haben Sie jemals eine Java-Datei gesehen, die close() eine Ausnahme auslöst?
Antwort
Ein IOException
wird auf close
geworfen, wenn der letzte flush
fehlschlägt. Mögliche Ursachen sind:
- das Dateisystem voll ist, oder der Benutzer über die Quote,
- Festplattenfehler,
- ein Dateisystem mit Gewalt post war,
- ein Remote-Dateisystem ist nicht verfügbar aufgrund zur Vernetzung oder anderen Problemen,
- (möglicherweise) ein Zeichencodierungsfehler in die Datei, wenn über ein
OutputStreamWriter
oder ähnlichen, - einen Gerätefehler zu schreiben, wenn die „Datei“ eine Gerätedatei ist,
- eine verlorene Verbindung, wenn die verschließbaren ein Netzstrom ist,
- ein Rohrbruch, wenn die verschließbaren ein Rohr zu externem Prozess,
- und so weiter.
Ich habe sicherlich einige davon gesehen. Andere sind unwahrscheinlich.
Wenn jedoch die Daten, die Sie schreiben, wichtig sind, sollten Sie zulassen, dass close
fehlschlägt. Wenn Ihre Anwendung beispielsweise eine kritische Datei ausgibt, die das Dateisystem ausfüllt, sollte Ihre Anwendung dies besser beachten, bevor sie die alte Kopie der Datei durch die abgeschnittene Version ersetzt.
Ich denke, Sie könnten versuchen, dies zu erzwingen, indem Sie die Diskette ausziehen, auf der sich Ihre Datei befindet. Aber auf jedem Closable
? Ich denke, es wäre einfach, etwas zu bekommen, das einen Sockel benutzt, um beim Schließen eine Ausnahme zu erzeugen.
Ich habe nicht, aber es ist möglich. Stellen Sie sich vor, es gibt eine OutputStream
, die aus irgendeinem Grund noch nicht in die Datei geschrieben hat. Nun, close()
Aufruf wird die Daten spülen, aber wenn die Datei gesperrt ist - dann würde eine IOException
ausgelöst werden.
Ja, es ist nicht so selten, IMHO, wenn Sie mit etwas anderem als nicht-lokalen Dateien arbeiten.
Close() funktioniert, wenn zu diesem Zeitpunkt Ihre schließbare noch gültig und offen ist. Viele Dinge wie Pipes, Remote-Dateien usw. können vorzeitig absterben.
Zusätzlich habe ich Code gesehen, der Fehler beim Öffnen und Schreiben ignoriert und immer noch versucht zu schließen (z. B. in einem endgültigen Block).
Nicht in Bezug auf Datei-io, aber in Bezug auf Sockets wird die Schließung IOException
auslösen, wenn die andere Seite die Verbindung abgebrochen hat. Wenn Sie beispielsweise eine HTTP-Anfrage auf einer (großen) Webseite auslösen und dann sofort durch Klicken auf einen anderen Link auf der Webseite navigieren (während das Laden noch nicht abgeschlossen ist), erhält die Serverseite eine IOException
(oder eine Unterklasse wie ClientAbortException
in Tomcat-Servern und Clones), wenn der Ausgabestream der HTTP-Antwort geleert/geschlossen werden soll.
Ich habe - in meinen Unit-Tests gegen Mocks;)
Versuchen Sie, auf es ein USB-Laufwerk mit einer geöffneten Datei zerren. Wenn es keine Ausnahme gibt, wäre ich ziemlich überrascht.
Alte Post und längst beantwortet, aber hier ist ein echtes Beispiel:
Der folgende Code wird ausnehmen, wenn bufferedWriter.close() aufgerufen wird. Dies geschieht, weil der zugrundeliegende Writer des BufferedWriter (der FileWriter) bereits geschlossen wurde und wenn ein BufferedWriter geschlossen wird, versucht er zuerst, alle Daten in seinem Puffer zu seinem zugrundeliegenden Writer zu löschen.
File newFile = new File("newFile.txt");
FileWriter fileWriter = new FileWriter(newFile);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write("Hello World");
fileWriter.close();
bufferedWriter.close();
Hinweis: Wenn es in dem Puffer keine Daten ist [Kommentar der write() Textzeile oder einen Flush() -Aufruf hinzufügen] dann wird keine Ausnahme
+1 für ein Beispiel geben. – sleske
- 1. Was ist die beste Form, die Sie jemals gesehen haben?
- 2. Haben Sie jemals ein Projekt gesehen, das ordnungsgemäß verwaltet wurde?
- 3. Wie testen Sie, dass eine Python-Funktion eine Ausnahme auslöst?
- 4. Worst technische Wissenslücke, die Sie gesehen haben?
- 5. Screencraping der hässlichste HTML, die Sie jemals in Ihrem Leben gesehen haben
- 6. Haben Sie während des Interviews jemals eine unerwartete Antwort erhalten?
- 7. Haben Sie jemals eine "Klasseninstanzvariable" in Ihrem Ruby-Code verwendet?
- 8. Haben Sie jemals eine signifikante Beschleunigung mit boost :: pool erreicht?
- 9. iOS - UUID-Generierung, die eine seltsame Ausnahme auslöst
- 10. Haben Sie jemals Reflektor reflektiert?
- 11. Die besten WPF Open-Source-Projekte, die Sie gesehen haben
- 12. Was ist die gruseligste LINQ-Funktion, die Sie gesehen haben?
- 13. Was passiert, wenn ein .NET-Thread eine Ausnahme auslöst?
- 14. PLSQL Funktion, die die Ausnahme nicht korrekt auslöst
- 15. Wie lösche Objekt, wenn Konstruktor eine Ausnahme auslöst?
- 16. Wie man eine Datei erstellt und eine Ausnahme auslöst, wenn sie bereits existiert
- 17. Haben Sie jemals Design-Muster "Position" gehört?
- 18. Haben Sie jemals private Erweiterungsmethoden verwendet?
- 19. Was passiert, wenn ein finally-Block eine Ausnahme auslöst?
- 20. Wie erwarte ich etwas, das in RSpec eine Ausnahme auslöst?
- 21. Haben Sie jemals von einer Lizenzübertragungsgebühr bei der Übernahme gehört?
- 22. Hat jemand eine Programmiersprache gesehen, die solche Threads behandelt?
- 23. Warum funktioniert implizites Casting, während das Reflektionscasting eine Ausnahme auslöst?
- 24. CLGeocoder jemals eine Ortsmarkierung
- 25. Java: Haben Sie jemals einen Compiler oder ein Tool gesehen, der ein abschließendes Komma im Array-Initialisierer rejiziert?
- 26. Haben Sie eine Richtlinie für die Checkbox?
- 27. Was ist der längste reguläre Ausdruck, den Sie gesehen haben
- 28. ActionScript - Gibt es eine Möglichkeit, dem Entwickler mitzuteilen, dass diese Methode eine Ausnahme auslöst?
- 29. Was ist die beste C# -Methode, die Sie für die Kapselung einer ADO.Net-Abfrage gesehen haben?
- 30. Wie würden Sie eine "Zuletzt gesehen" -Funktion für Benutzer implementieren?
Interessante erzeugt werden .. .. –