2014-12-11 6 views
9

Ich bemerkte eine andere Java-Ausnahme für die Angabe, dass die Datei nicht existiert - NoSuchFileException. Ich hatte den Auftrag, eine bestimmte API umzuformen, die beide aus unterschiedlichen Methoden herausstreicht, und ich möchte nur eine verwenden.FileNotFoundException vs NoSuchFileException

Sollte ich NoSuchFileException zu Datei auf FileNotFoundException zuordnen? Sollte ich NoSuchFileException anstelle von FileNotFoudnException verwenden, weil es spezifischer ist?

EDIT: Aktualisiert die Frage. Ich lese die Dokumentation vor dem Posten dieser Frage und kenne den grundlegenden Unterschied. Ich habe auf zusätzliche Informationen und die Anleitung in diesem Fall gehofft, da die Ausnahmebehandlung nach Typ für die Kunden der Service-API wichtig ist und ich möchte den Fall vermeiden, wenn die Prüfung für beide Ausnahmetypen durchgeführt werden muss.

+2

Haben Sie die Spezifikationen für sie gelesen? –

+1

Die Java 7-Ausnahme NoSuchFileException wird nur verwendet, wenn die angeforderte Datei nicht existiert. die frühere Version FileNotFoundException wurde dafür verwendet und auch für Fälle, in denen die Datei existiert, aber aus irgendeinem Grund nicht zugegriffen werden kann. –

+0

Einer ist für die Verwendung mit der Dateiklasse; der andere ist für die Verwendung mit der Path-Klasse. Ihre Pakete sollten das klar gemacht haben. Beachten Sie, dass Sie keine dieser Ausnahmen abfangen sollten. Sie sollten nach der Existenz/Lesbarkeit einer Datei suchen, bevor Sie versuchen, sie zu lesen. – VGR

Antwort

4

Im Gegensatz zu NoSuchFileException, FileNotFoundException bedeutet nicht unbedingt, dass die Datei nicht existiert, es könnte einfach nicht zugänglich sein. Abgesehen davon bin ich mir nicht sicher, wie es dir anders geht.

6

FileNotFoundException

Signale, die ein Versuch, die Datei von einem bestimmten Pfad ausgefallen bezeichnet zu öffnen. Diese Ausnahme wird von den Konstruktoren FileInputStream, und RandomAccessFile ausgelöst, wenn eine Datei mit dem angegebenen Pfadnamen nicht existiert. Es wird auch von diesen Konstruktoren ausgelöst, wenn die Datei existiert, aber aus irgendeinem Grund nicht auf zugegriffen werden kann, wenn beispielsweise versucht wird, eine schreibgeschützte Datei zum Schreiben zu öffnen.

NoSuchFileException

Karo geworfen Ausnahme, wenn versucht wird, eine Datei zuzugreifen, die nicht existiert.

Die Dokumentation ist selbsterklärend.

+1

Es machte es deutlich klar. FileNotFound sollte FileNotAccesible oder etwas sein, es scheint, dass Java versucht, dies in Java 7 zu korrigieren, es kann nicht einfach FileNotFound entfernen, kann Java 9 sein, sie werden es ablehnen. – Panther

+0

Scheint, dass ein Javadoc für die FileNotFoundException nicht aktuell ist, da der FileReader-Konstruktor auch FileNotFoundException auslöst, während er im Javadoc der Ausnahme nicht erwähnt wird. –

3

IMHO, gibt es eine Nuance in der Semantik dieser beiden Ausnahmen. NoSuchFileException wird normalerweise verwendet, wenn keine Datei an der erwarteten Position vorhanden ist, während FileNotFoundException auch für diesen Fall verwendet wird, aber auch für den Fall, dass die Datei vorhanden ist, aber nicht zugegriffen werden kann. (Berechtigungsproblem, etc ...)

Darüber hinaus beachten Sie, dass NoSuchFileException in Java 7 eingeführt wurde, also für Ihre spezifische Aufgabe, würde ich zu FileNoteFoundException bleiben, wie es allgemeiner ist und kompatibel mit Java 1.6

0

NoSuchFileException erweitert die neue (ab 1.7) FileSystemException Unterklasse von IOException, während FileNotFoundException eine direkte Unterklasse von IOException ist. Als neue Elternklasse sollte FileSystemException so vollständig wie möglich sein, daher die Hinzufügung von NoSuchFileException, trotz des Auftretens von Redundanz. Die Unterklassen NotDirectoryException und AccessDeniedException bringen die frühere Funktionalität gut zur Geltung, anstatt die verschiedenen Möglichkeiten in einem nicht unterscheidbaren Klumpen zu belassen.

Verwandte Themen