2016-12-07 4 views
0
package test4; 

import java.io.*; 

public class Reader { 

    public static void main(String[] args) { 
     print(send("test.txt")); 
    } 

    public static BufferedReader send(String filename) { 
     File file = null; 
     FileReader filer = null; 
     BufferedReader filed = null; 

     try { 
      file = new File(filename); 
     } catch(FileNotFoundException e) { 
      System.err.println("Could not find file!"); 
     } 

     try { 
      filer = new FileReader(file); 
     } catch(Exception e) { 
      System.err.println("Could not initialize file reader!"); 
     } 

     try { 
      filed = new BufferedReader(filer); 
     } catch(Exception e) { 
      System.err.println("Could not initialize buffered reader!"); 
     } 

     return filed; 
    } 
} 

Die send-Methode gibt einen null BufferedReader zurück, da die Datei nicht gefunden werden kann. Eclipse sagt nur, es gibt eine NullPointerException wegen der print-Methode, aber wenn ich alle try/catch-Anweisungen entferne, sagt Eclipse, dass ich schreiben muss, dass die Methode entweder eine IOException oder FileNotFoundException auslöst, erlaubt mir dies auch, und wenn ich Dann löst es keine FileNotFoundException aus. Wenn ich jedoch versuche, eine FileNotFoundException für die Datei abzufangen, sagt Eclipse, dass dies nicht erreichbarer Code ist? Grundsätzlich ist dieses Bit hier:Warum kann ich diese FileNotFoundException nicht abfangen?

try { 
     file = new File(filename); 
    } catch(FileNotFoundException e) { 
     System.err.println("Could not find file!"); 
    } 

Warum Eclipse-sagen, dass dieser Code nicht erreichbar ist, wenn nur das Entfernen der try/catch-Anweisungen ermöglicht es mir, eine FileNotFoundException zu werfen?

+2

'neue Datei (Dateiname)' 'eine FileNotFoundException' nicht werfen, werden Sie erstellen erlaubt' Dateiobjekte ohne existierende physische Datei (deshalb existiert die Methode 'exists()'). – Berger

Antwort

0
try { 
    file = new File(filename); 
} catch(Exception e) { 
    System.err.println("Could not find file!"); 
} 
4

Die contructor tut throw FileNotFoundException der Datei, können Sie es hier, am Javadoc sehen:

öffentliche Datei (String Pfadname)

Erstellt eine neue Datei-Instanz durch die gegebene Umwandlung Pfadname Zeichenfolge in einen abstrakten Pfadnamen. Wenn die angegebene Zeichenfolge die leere Zeichenfolge ist, ist das Ergebnis die leere Zusammenfassung Pfadname.

Parameter: Pfad - Ein Pfadname String

Löst aus: Nullpointer - Wenn der Pfadname Argument

Aber die Filereader wirft null ist! Wieder eine andere javadoc

public Filereader (File-Datei) FileNotFoundException wirft Erstellt ein neues Filereader, da die Datei von zu lesen.

Parameter: Datei - die Datei von

lesen Lösen aus: FileNotFoundException - wenn die Datei nicht existiert, wird ein Verzeichnis statt eine reguläre Datei, oder aus einem anderen Grunde nicht kann zum Lesen geöffnet werden.

0

Der Konstruktor File(filename) nicht ein FileNotFoundException, nicht einmal aus, wenn die Datei nicht existiert, können Sie die file.exists() mit überprüfen.

Eine FileNotFoundException wird ausgelöst, wenn Sie versuchen, eine nicht vorhandene Datei zu lesen.

0

Ich habe gerade versucht, Ihr Programm zu starten. Die folgenden Bilder sagt, dass Datei

nicht null ist

debugger... enter image description here

file erstellt wird, obwohl die filePath ist null.wenn Sie einen FileNotFoundException fangen wollen, wenn die Datei nicht existiert, können Sie etwas tun:

 if(!file.exists()){ 
      throw new FileNotFoundException("File not found"); 
     } 
Verwandte Themen