2016-08-24 2 views
0

Ich habe Methode für beim Lesen von Datei:Java FileExeptions nicht gefunden werfen, aber Datei wirklich existieren

public String getFile(String fileName) { 
    String line; 
    StringBuilder result = new StringBuilder(""); 
    try { 
     //Get file from resources folder 
     ClassLoader classLoader = getClass().getClassLoader(); 
     File file = new File(classLoader.getResource(fileName).getFile()); 
     try (BufferedReader in = new BufferedReader(
      new InputStreamReader(
       new FileInputStream(file), "UTF8"))) { 
      while ((line = in.readLine()) != null) { 
       result.append(line).append("\n"); 
      } 
     } 
    } catch (Exception e) { 
     System.out.println("Err: " + e); 
    } 

    return (result.toString()); 
} 

Wenn ich diesen Code ausführen ich java.io.FileNotFoundException ein exeption bin immer:

Err: java. io.FileNotFoundException: D: \ programov% C3% A1n% C3% AD \ GITBitBucket \ Schnell% 20Annotation \ maven-Projekt-quickannotation \ target \ classes \ template \ basic.txt

Aber ich bin mir sicher, dass diese Datei wirklich existiert.

Original-Pfad ist:

D: \ Programování \ GITBitBucket \ Schnell Annotation \ Maven-Projekt-quickannotation \ target \ classes \ template \ basic.txt

denke ich, es ist ein Problem mit Abschnitt des Pfades:

Programov%C3%A1n%C3%AD vs Programování 

Quick%20Annotation vs Quick Annotation 

Können Sie mir helfen?

Ich weiß nicht, wie man es löst.

Vielen Dank für Ihre Hilfe.

+0

Meine Vermutung ist, ist das Problem nicht innerhalb der Methode, die Sie geschrieben, aber in den Code Ihrer 'getFile (String)' Methode aufrufen. Weil der 'String fileName' codierte Sonderzeichen enthält. Woher kommt dieser Wert? - [Debug Ihrer Anwendung] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) –

+0

Ich Caling die Methode mit diesem Code: getFile ("Vorlage/Basis. txt"); –

+0

Mein schlechtes. 'Classloader.getResource (String name)' gibt eine 'URL' zurück, die der Grund ist. –

Antwort

-1

Sie müssen mit dem Pfad aufrufen, aber nicht mit "classLoader.getResource", da dies Ressourcen in das Glas bekommt.

Versuch:

File file = new File(fileName); 

So sind Sie für eine Datei suchen einen Systempfad verwenden.

+0

Nein, ich brauche den Pfad mit dem Classloader in meiner Federanwendung. –

0

Verwenden

classLoader.getResourceAsStream(fileName); 

ein InputStream direkt statt den Umweg über File abzurufen.

siehe Oracle ClassLoader API doc

Verwandte Themen