File auf Gültigkeit überprüfen

Status
Nicht offen für weitere Antworten.

y0dA

Top Contributor
Hi!
Also ich bekomme vom Benutzer eine Pfad-String sowie einen Filenamen-String und beide möchte ich überprüfen ob sie gültig sind.

Bsp:
Code:
public void isFileValid() throws NoFileException, FileNotFoundException {
		File file = new File(this.fPath + this.fName);
		if (!file.isFile()) {
			throw new NoFileException("blah");
		} else if (!file.exists()) {
			throw new FileNotFoundException("blah");
		} else if (!file.canRead()) {
			throw new CannotReadFileException("blah");
		}
	}
CannotReadFileException und NoFileException sind Spezialisierungen von IOException.

Nun meine Frage, macht das Sinn hier die Exceptions zu werfen oder sollte ich lieber wie folgt fortgehen:
Code:
public boolean isFileValid() {
		File file = new File(this.fPath + this.fName);
		return (file.isFile() && file.exists() && file.canRead());
	}

Ich möchte halt das Exception Handling richtig implementieren, nur finde ich die 1. Variante irgendwie komisch.
Weiters habe ich mit Variante 1. auch das "Problem" dass ich nun bis zum Controller hinauf, alle Aufrufer mit "throws" im Methodenkopf schmücken darf.

Jemand Vorschläge?

mfg
 
M

maki

Gast
Beides ist möglich, je nachdem.

Sog. "Checked" Exceptions zu deklarieren und vielleciht auch zu werfen machen die Verwendung deiner Methode umständlich, jedesmal einen Try-Catch Block drumherum.

Als Alternative kannst du die isFileValid() Methode nutzen, falls es dann zum Problem kommt kannst du immer noch eine "unchecked" RunTimeException werfen.
 

y0dA

Top Contributor
Ich könnte die beiden Exceptions (CannotReadFileException und NoFileException) auch von RuntimeException ableiten, jedoch passen jene wohl besser zu IOException?

Wie würdet ihr es handhaben?
Eigentlich ist die Exception-Variante schöner, da ich dann definitiv beim Controller weiß, was vorgefallen ist.

Weiters macht so eine Methode, ohne Rückgabewert eigentlich Sinn bzw was sollte ich hier zurückgeben?
Code:
public void isFileValid() throws NoFileException, FileNotFoundException { 
      File file = new File(this.fPath + this.fName); 
      if (!file.isFile()) { 
         throw new NoFileException("blah"); 
      } else if (!file.exists()) { 
         throw new FileNotFoundException("blah"); 
      } else if (!file.canRead()) { 
         throw new CannotReadFileException("blah"); 
      } 
   }
 
M

maki

Gast
Was sollte der Controller mit dieser Info anfangen?

Benutze die Standardexception wann immer möglich.
Ich würde nicht zuviele eigene Exceptions definieren, macht die Sache unnötig kompliziert und bringt meistens wenig Vorteile.

FileNotFoundException, IOException etc. ist imho gut genug, kannst du intern in deiner Methode fangen, als "cause" an eine RunTimeException übergeben die du dann wirfst, die kann der Controller auch auswerten und du hast keine checked Exceptions zu fangen.

Wie gesagt, all das im zusammenspiel mit isFileValid.
 
M

maki

Gast
Code:
public void isFileValid() throws NoFileException, FileNotFoundException {
      File file = new File(this.fPath + this.fName);
      if (!file.isFile()) {
         throw new NoFileException("blah");
      } else if (!file.exists()) {
         throw new FileNotFoundException("blah");
      } else if (!file.canRead()) {
         throw new CannotReadFileException("blah");
      }
   }
Diese Methode sollte imho keine checked Exceptions werfen, sonnst brauchst du sie ja gar nicht, oder? ;)
 

y0dA

Top Contributor
Also im Grunde genommen ist die Sachlage wie folgt:
Ich habe ein Interface, in welchem folgender Methodenkopf steht:
Code:
public void storeTracksFromFile(final String fPath, final String fName, final Class className,
			final Receiver receiver);

Die Implementierung hierzu sieht dann wie folgt aus:
Code:
	public void storeTracksFromFile(final String fPath, final String fName, final Class className,
			final Receiver receiver) {
		try {
			FileSystemProcessor fsp = new FileSystemProcessor(fPath, fName);
			if (fsp.isFileValid()) {
				fsp.setItrackParser((ITrackParser) className.newInstance());
				this.storeTracksFromFile(fsp, fPath, fName, receiver);
			} else {
				//FIXME was hier machen??
			}
		} catch (IllegalAccessException e) {
//			FIXME was hier machen??
		} catch (InstantiationException e) {
//			FIXME was hier machen??
		}
	}

Hier stellt sich nun die Frage ob ich die Interface Methode ändern sollte und jener einen boolean Wert statt void als Rückgabewert verpassen sollte?

Ich weiß halt nicht wirklich wie ich hier vorgehen soll, also Exception (checked oder unchecked) werfen oder nur mit boolean arbeiten --> Ziel sollte auf jeden Fall sein, dass der Aufrufer der Interface Methode weiß, ob das speichern geklappt hat oder nicht
 
M

maki

Gast
Du musst dich entscheiden:

boolean oder Exception?

Detailierte Fehlermeldungen an den User zu schicken geht am besten mit Exceptions.

Wenn der User nur sehen soll ob es funktioniert hat oder nicht, reicht der boolean als Rückgabewert.
Ansonsten nimmst du Exceptions.

Mit Exceptions musst du dich nochmals entscheiden:
checked oder unchecked?

D.h. immer einen try-catch Block bzw. ein throws im Methodenkopf mit checked Exceptions.
Das macht man wenn man "erwartet" das etwas schief geht, oft der Fall wenn man auf externe Ressourcen wie DBs oder eben das Filesystem zugreift, oft aber nicht immer.
Als Beispiel sei hier die delete Methode der File Klasse genannt, gibt true zurück, wenn die Datei/das Verzeichniss gelöscht wurde, ansonsten false.
Andere Methoden der Fileklasse werfen checked Exceptions.

Mit unchecked Exceptions kannst du signalisieren, dass etwas, das eigentlich nicht schief gehen könnte schief gegangen ist, sehr nützlich wenn es um das aufspüren von Programmierfehlern geht, deswegen sollte man vorsichtig sein mit dem Fangen von RuntimeExceptions.


Mit dem boolean als Rückgabewert brauch man keine "erwarteten", also checked Exceptions zu fangen und spart sich das try-catch bzw. die throws Klausel im Methodenkopf.
 

y0dA

Top Contributor
Und wofür würdest du dich in diesem konkreten Fall entscheiden, da es sich hier ja auch um FileHandling dreht?

Und wenn ich die Exception Variante benutze, wo soll ich die Exception werfen?

danke schon mal für deine Geduld, mir hier Exceptionhandling näher zu bringen - welches ich bislang leider nur stiefmütterlich benutzt habe.
 
M

maki

Gast
In deinem Fall würde ich checked Exceptions verwenden, da du ja sagst:
Also ich bekomme vom Benutzer eine Pfad-String sowie einen Filenamen-String und beide möchte ich überprüfen ob sie gültig sind.
Denn wie wir alle wissen machen Benutzer ständig Fehler ;)

Würde mich allerdings auf die Standard Exceptions beziehen, diese catchen und dann dem Benutzer eine aussagekräftigere Fehlermeldung präsentieren.
 

y0dA

Top Contributor
Jo danke - dann werde ich die Methode isValid() mit den boolean Werten lassen und dann bei storeTracksFromFile(..) im else Zweig eine IOException werfen.

dankeschön

mfg
 
M

maki

Gast
Wozu diese isValid() Methode dann überhaupt?

Könntest ja einfach darauf zugreifen und wenn's kracht wird eine Exception geworfen auf die du entsprechend reagieren kannst, das ist es doch was du möchtest.
 

y0dA

Top Contributor
maki hat gesagt.:
Wozu diese isValid() Methode dann überhaupt?

Könntest ja einfach darauf zugreifen und wenn's kracht wird eine Exception geworfen auf die du entsprechend reagieren kannst, das ist es doch was du möchtest.

Jo eh..
Die Methode ist noch ein Relikt aus der Vorzeit dieser Klasse :D

Ich werde es nun so lösen, dass ich gleich beim Konstruktor des FileSystemProcessor auf Gültigkeit überprüfen - damit weiß ich gleich bei der Instanzierung ob ich ein gültiges Objekt habe.


Also nochmal danke für deine Hilfe.

mfg
 
M

maki

Gast
Exceptions solltenimho am besten nicht im Konstruktor geworfen werden, Objekte die einen undefinierten Zustand haben sollten vermieden werden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
R File.pathSeparator und File.separator Java Basics - Anfänger-Themen 46
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
izoards Prunsrv - Windows Service - .bat file starten Java Basics - Anfänger-Themen 84
I File Uploader... Statusanzeige, Berechnung des Status etc. Java Basics - Anfänger-Themen 0
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
berserkerdq2 IOstreams, was unterscheidet file von z. B. BufferedWriter? Java Basics - Anfänger-Themen 11
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
A java jar-File Java Basics - Anfänger-Themen 1
E Executable jar file fehler Java Basics - Anfänger-Themen 9
I Upload File zu einem Webservice Java Basics - Anfänger-Themen 17
I ZIP File erstellen Java Basics - Anfänger-Themen 10
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
Tom/S File Java Basics - Anfänger-Themen 10
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
A Checkstyle - File contains tab characters Java Basics - Anfänger-Themen 2
H Java file nicht gefunden Java Basics - Anfänger-Themen 5
C File speichern Java Basics - Anfänger-Themen 5
C Runnable Jar-File erzeugen Java Basics - Anfänger-Themen 14
C Pfad zu Properties-File bei ResourceBundle Java Basics - Anfänger-Themen 7
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
rafi072001 Lesen aus einem Excel File Java Basics - Anfänger-Themen 10
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
K File (png) in Image laden Java Basics - Anfänger-Themen 3
B Inputstream in file schreiben? Java Basics - Anfänger-Themen 23
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
T Buffered Stream leert Txt File Java Basics - Anfänger-Themen 3
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
Dimax In Java File (nicht in Java Projekt) mysql Driver importieren Java Basics - Anfänger-Themen 3
K File wird in der .Jar nicht gefunden Java Basics - Anfänger-Themen 3
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
Trèfle EXCEL-File Laufwerkunabhängig einbinden. Java Basics - Anfänger-Themen 1
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
B Hilfe bei InputStream To File Java Basics - Anfänger-Themen 22
topi relativer Pfad in einem Runnable JAR file Java Basics - Anfänger-Themen 12
A jar File kleiner bekommen Java Basics - Anfänger-Themen 3
B File öffnen in src/main/webapp Java Basics - Anfänger-Themen 4
K File-Name Vergleich Java Basics - Anfänger-Themen 2
krgewb Runnable JAR File Export Java Basics - Anfänger-Themen 11
S Maxium aus einer File finden Java Basics - Anfänger-Themen 12
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
D Input/Output File exists canRead canWrite Java Basics - Anfänger-Themen 11
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
F File von Windowsfreigabe laden Java Basics - Anfänger-Themen 1
S java.nio.file.FileSystemException bei Dateizugriff vermeiden Java Basics - Anfänger-Themen 7
Vince42 NIO File Tree in XML umwandeln Java Basics - Anfänger-Themen 10
J Zweidimensionales Array in CSV File exportieren Java Basics - Anfänger-Themen 3
E War-File Problem mit Eclipse Java Basics - Anfänger-Themen 3
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
M Email versenden Outlook, attached File, ohne Anmeldung Java Basics - Anfänger-Themen 4
M Input/Output Word File Kopieren Java Basics - Anfänger-Themen 12
K Runable Jar File erstellen Java Basics - Anfänger-Themen 17
T Java Executable jar file funktioniert nicht Java Basics - Anfänger-Themen 4
sourcecorn Werte aus einem File lesen Java Basics - Anfänger-Themen 6
Kopak'rraf Korruptes zip File. Java Basics - Anfänger-Themen 0
T File für Einstellungen wird nicht geladen Java Basics - Anfänger-Themen 1
S Sounddatei in Jar File integrieren Java Basics - Anfänger-Themen 2
S Index File bauen Java Basics - Anfänger-Themen 5
T Anzeige, wie lange es noch dauert bis ein File gesendet ist. Java Basics - Anfänger-Themen 2
T filereader , file aus programm einlesen Java Basics - Anfänger-Themen 12
Ghostman1711 Itext PDF print File gelockt by Java Java Basics - Anfänger-Themen 15
N Email mit Anhang - File not Found Java Basics - Anfänger-Themen 1
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
Syncopated Pandemonium Compiler-Fehler The constructor MP3File(File) refers to the missing type NoMPEGFramesException Java Basics - Anfänger-Themen 7
S File mit canRead() testen Java Basics - Anfänger-Themen 4
A file.delete funktioniert nicht Java Basics - Anfänger-Themen 15
K Classpath Lesen von Property-File Java Basics - Anfänger-Themen 1
S jar file Java Basics - Anfänger-Themen 19
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
B Dateityp von File bekommen Java Basics - Anfänger-Themen 2
I Automatisch Verzeichnis erstellen bei File erstellen Java Basics - Anfänger-Themen 5
E Große Datenmengen effizient in CSV File speichern Java Basics - Anfänger-Themen 4
I String zu File umwandeln Java Basics - Anfänger-Themen 2
N File virtuell ByteStream Java Basics - Anfänger-Themen 11
X Übergabeparameter Konstruktor (File) Java Basics - Anfänger-Themen 13
Anfänger2011 file.isDirectory() liefert falschen Wert!? Java Basics - Anfänger-Themen 1
ms_cikar Jar file mit resource erzuegen Java Basics - Anfänger-Themen 28
E lesen csv file column by column Java Basics - Anfänger-Themen 10
U Anhand von Ant ein War-File erstellen Java Basics - Anfänger-Themen 0
B Quellcode einelsen "line by line" (und abspeichern in file (txt) Java Basics - Anfänger-Themen 7
O Zip-File Inhalt einlesen Java Basics - Anfänger-Themen 3
V Erste Schritte Dateinamen aus einer FIle[] in eine List Java Basics - Anfänger-Themen 11
P Jar File Java Basics - Anfänger-Themen 3
B Probleme bei "Daten in CSV File schreiben". Java Basics - Anfänger-Themen 9
S CSV File - "Vergleichen und Sortieren" Java Basics - Anfänger-Themen 3
T Wieso kann ich das jar file nicht starten? Java Basics - Anfänger-Themen 5
S Resourcen-Dateien im Jar-File verfügbar machen (Intellij 14) Java Basics - Anfänger-Themen 14
A Wieso übergibt der nicht die bearbeitete txt file Java Basics - Anfänger-Themen 8
Ruvok Executable Jar File startet nicht Java Basics - Anfänger-Themen 3
R Ini File erstellen Java Basics - Anfänger-Themen 1
J file.lenght spinnt ab 50mb Java Basics - Anfänger-Themen 7

Ähnliche Java Themen


Oben