HINWEIS: Bitte führen Sie den genauen Code unten aus; keine Anpassungen davon, insbesondere, verwenden Sie nicht File
, da dieser Fehler an die neue java.nio.file
API gebunden ist
Okay, das ist nicht wirklich eine "Frage, die eine Antwort braucht", sondern ein Ruf nach Zeugen ...
Szenario:
System.getProperty("java.io.tmpdir")
repräsentiert wird, der Rechnung entspricht; java.nio.file
zu Ihrer Verfügung haben. Nun, was der folgende Code macht ist ziemlich einfach: Er versucht Öffnen Sie ein neues InputStream
in diesem Verzeichnis mit Files.newInputStream()
. Code (auch verfügbar hier ; meine Kommentare wurden hinzugefügt):
OK, jetzt, wenn Sie diesen Code ausführen, geschieht dies für die folgenden JRE / OS-Kombinationen:
IOException (is a directory)
bei FAIL_READ
; IOException (is a directory)
at FAIL_READ
; IOException (is a directory)
bei FAIL_READ
; AccessDeniedException
bei FAIL_OPEN
(!!). Ehrlich gesagt, weiß ich nicht, was ich mit diesem Code tun soll. Wie ich in der Einleitung gesagt habe, suche ich hier nach Zeugen. Ich werde OpenJDK diesbezüglich sicherlich einen Fehler melden, das scheint ziemlich ernst zu sein. Ich habe auch die Mailingliste nio-dev über dieses Problem geschickt.
Nun, zu einer Frage hätte ich eine: Was ist mit einem IsDirectoryException
im JDK (erbt FileSystemException
)? Ich habe es tatsächlich in einem meiner Projekte definiert, um ein solches Problem zu berücksichtigen. Ich bin nicht sicher, warum dieses Problem von den "Java-Typen" nicht berücksichtigt wurde ...
Meine Beobachtungen (sorry, keine anderen Systeme um ATM, später könnte ich ARM hinzufügen):
java.io.IOException: Is a directory
at // FAIL_READ
. Ich stimme zu, dass dieses Verhalten unerwartet ist. Es sollte nicht möglich sein, zuerst einen InputStream aus einem Verzeichnis zu erstellen. Ich schlage vor, dass Sie dies als Fehler ablegen. Auch wenn Files.newInputStream
dies nicht explizit angibt, ist das Verhalten inkonsistent mit dem Rest der API.
Tags und Links java java.nio.file