Programmatisch die Ursache von IOException bestimmen?

8

Gibt es eine Möglichkeit, programmatisch zu unterscheiden, was eine IOException verursacht hat? Zum Beispiel wird Java eine IOException auslösen, wenn beim Schreiben ein Fehler aufgetreten ist. Wie kann ich feststellen, ob es etwas wie Zugriffsverletzung ist, wenn die Festplatte keinen freien Speicherplatz mehr hat, wenn jemand das Netzwerklaufwerk oder andere Dinge getrennt hat.

Ich kann die Nachricht nicht wirklich parsen, da es kein standardisiertes Nachrichtenformat zu geben scheint. Sun (oder oracle, nehme ich an) scheint kein standardisiertes Format zu haben.

Irgendwelche Vorschläge (Ich bin ziemlich neu in Java, es ist nicht meine normale Sprache, aber ich muss es benutzen, um ein sehr kaputtes System bei der Arbeit zu reparieren.)

    
UberJumper 29.07.2010, 15:29
quelle

2 Antworten

5

Leider hat Java keine Entsprechung von .NET's System.Runtime.InteropServices.Marshal.GetHRForException() . Sie sagen, welche Art von E / A-Fehler es nur war, wenn die Ausnahme eine Instanz einer Unterklasse ist, z. FileNotFoundException .

    
finnw 29.07.2010, 15:38
quelle
0

Wenn Sie die genaue Klasse der Exception erhalten, erhalten Sie eine der wenigen möglichen Unterklassen von IOException, die ziemlich standardisiert sind. Sie können entweder Klassen mit instanceof testen oder (ein brutaler Ansatz) Zeichenketten vergleichen, die von getClass().getName() zurückgegeben wurden.

Es gibt einige Problemumgehungen für die anderen Sachen; Sie können File.canWrite() für eine Datei schreiben, die Sie gerade zum Schreiben öffnen (Ihr Programm hätte das sowieso tun müssen, wenn der Name und / oder das Verzeichnis variieren könnten), und wenn die Chance besteht, dass Sie keine Datei mehr haben Raum, könnten Sie versuchen, eine kleine Datei an einem bekannten guten Ort zu schreiben und zu sehen, ob das auf Sie explodiert. Nicht sehr elegant, ich weiß: Java ist nicht wirklich als Systemprogrammiersprache bekannt.

Auf der anderen Seite hilft es oft nicht, einen detaillierten Grund für eine Ausnahme zu kennen: Mit oder ohne Wissen kann Ihr Benutzer das Programm einfach nicht dazu bringen, das zu tun, was benötigt wird.

    
Carl Smotricz 29.07.2010 15:48
quelle

Tags und Links