Datei.getCanonicalPath() Fehler Beispiele
Hat jemand eine Erfahrung oder wissen, wenn die Methode File.getCanonicalPath()
wirft einen IOException
Ich habe versucht, sich aus dem Internet und die beste Antwort ist in Datei-API was sagt
"IOException
- Wenn ein I/O-Fehler Auftritt, ist möglich, weil die Konstruktion der kanonischen Pfadnamen erfordern Dateisystem Abfragen"
Aber es ist mir nicht klar, weil ich immer noch nicht denken kann der Fall, könnte dies fehlschlagen. Kann mir jemand konkrete Beispiele, die passieren können, die auf Linux -, Windows-und andere Betriebssystem (optional)?
Ich Grund warum ich das wissen will ist weil ich damit umgehen will diese Ausnahme entsprechend. So wird es am besten sein, wenn ich weiß, dass alle möglichen Fehler, die passieren können.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Windows-Beispiel:
Versuchen Sie anrufen
getCanonicalFile
auf eine Datei in Ihrem CD-Laufwerk, aber ohne eine CD eingelegt ist. Zum Beispiel:erhalten Sie:
Den E /a-Ausnahme tritt auch auf, wenn wir versuchen, die Schaffung eines File-Objekts mit dem Windows-Geräte-Datei, die Schlüsselwörter (siehe device-Dateien) als Dateiname verwendet.
Als wenn Sie versuchen, die Datei umzubenennen, um diese keywords, wird Windows nicht lassen Sie es zu machen (keine CON, PRN, COM1 usw. Datei-Namen dürfen), Java auch nicht in der Lage zu konvertieren, die Datei-Namen auf den richtigen Pfad.
So, jede der next code trow die E /a-Ausnahme:
Jedoch, folgender code sollte funktionieren:
Gesehen hier in der Sun-Bug-Datenbank.
Für JRE 1.4.2_06, die Datei.getCanonicalPath() funktionierte nicht auf Windows für ein austauschbares Laufwerk, wenn es keine Medien in das Laufwerk.
Es wurde korrigiert in Java 1.5, aber Sie können sehen, es kann sein OS-basierten Probleme mit dieser Methode.
Ich kenne kein problem in der aktuellen Zeit, aber es kann passieren, das ist genau das, was die Javadoc sagt. Es ist in der Regel schnell behoben in der neuesten Java-version.
Hier ist generisches Beispiel für alle OS:
Bevor canonicalizing der Datei auf Ihre Gültigkeit überprüft, mit java.io.Datei#isInvalid:
Wenn die Datei ungültig ist, erhalten Sie eine E /a-Ausnahme:
Gewinn!
Eine weitere Szenario, Wenn Sie versuchen, verwenden Betriebssystem eingeschränkt/ungültige Zeichen als Dateinamen.
Für Windows
\ /: * ? " < > |
dies sind die ungültigen Zeichen. Versuchen Sie, eine Datei umzubenennen mit : Sie erhalten eine Ballon - /Tipp-Meldung über die ungültige Zeichen.Versuchen Sie, die Folgenden Java-Code.
Wenn der name der Datei enthält
* ?
erhalten Sie java.io.IOException: Invalid argument| :
erhalten Sie java.io.IOException: Der Dateiname, Verzeichnisname oder Datenträgerbezeichnung ist falschwenn Sie die getCanonicalPath () - Methode.
Wenn wir verwenden
" < >
char in der Datei-name, dann getCanonicalPath () - Methode ist nicht Versagen aber, wenn Sie versuchen, erstellen Sie die Datei, die Sie bekommen werden die Invalid argument-Exception.
Finden jdk7 api
Die genaue definition der kanonischen form ist system-abhängig. Hier habe ich windows 7.