2017-06-11 3 views
1

Ich bin neu in NetBeans und habe Probleme mit beiden IDEs meine Dateien nicht zu finden. Wenn ich mein Programm in PowerShell kompiliere und ausführe, läuft es perfekt. Der ExceptionError ist wie folgt: "java.io.FileNotFoundException: model \ field \ levels \ map01.field". Meine Pakete sind.NetBeans und Eclipse FileNotFoundException

  • Controller
  • model.field.levels
  • view.tiles

In Field.java:

public void setField() { 
    FieldReader fr = new FieldReader(); 
    field = fr.load("model/field/levels/map01.field"); 
} 

In FieldReader.java:

public int[][] load(String path){ 
    int field[][] = null; 
    try { 
     File file = new File(path); 
     BufferedReader br = new BufferedReader(new FileReader(file)); 
     String s = null; 
     int line = 0; 
     int x = 0; 
     int y = 0; 
     while((s = br.readLine()) != null) { 
      if(line == 0) { 
       int start = 0; 
       int split = 0; 
       for (int i = 0; i < s.length(); i++) { 
        if(s.charAt(i) == 32) start = i + 1; 
        if(s.charAt(i) == 'x') split = i; 
       } 
       x = Integer.parseInt(s.substring(start, split)); 
       y = Integer.parseInt(s.substring(split + 1)); 
       System.out.println(x); 
       System.out.println(y); 
       field = new int[x][y]; 
      } 
      if(line >= 2) { 
       for (int i = 0; i < x; i++) { 
        field[i][line - 2] = Character.getNumericValue(s.charAt(i)); 
       } 
       System.out.println(s); 
      } 
      line++; 
     } 
     br.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return field; 
} 

Die Datei ist vorhanden und durch Laden anderer Dateien wie Bilder funktioniert alles einwandfrei.

+1

Sie erwarten, dass Ihr aktuelles Arbeitsverzeichnis auf einen sinnvollen Wert gesetzt wird, sodass der relative Pfad aufgelöst wird. Java legt Ihr aktuelles Arbeitsverzeichnis nicht fest. –

+1

Versuchen Sie, 'file.getAbsolutePath()' ' –

+0

auszudrucken Ich habe dies versucht, aber etwas Seltsames passiert. – SeTirap

Antwort

0

Das Problem ist bereits gelöst. In NetBeans ist es möglich, das Arbeitsverzeichnis beim Laufen unter Rechtsklick auf das Prokekt> Eigenschaften> Ausführen> Arbeitsverzeichnis zu setzen. Der Absolute Weg bringt mich zur Lösung, also danke für den Hinweis Thorbjorn. : D

+1

Ich kann dringend empfehlen, filenotfunddexceptions zu erfassen und mit einer Beschreibung zu umbrechen, die den absoluten Pfad der nicht gefundenen Datei enthält, damit sie Teil des Stacktrace wird. Es wird Ihnen eine Menge Arbeit ersparen. –

0

Sie verlassen sich auf relative Pfade, die erfordern, dass das aktuelle Arbeitsverzeichnis auf etwas Nützliches gesetzt wird. Java macht das nicht automatisch, also müssen Sie dies (oder Ihre IDE) tun, wenn Sie Ihr Programm starten. Ein sehr nützliches Werkzeug ist

File f = .... 
System.out.println(f.getAbsolutePath()); 

um Ihnen zu sagen, was tatsächlich gesucht wird. Wenn Sie weiter fortgeschritten sind, können Sie die JVM fragen, wo sie Ihre Klasse gefunden hat und dann den Speicherort der Dateien ermitteln, die Sie benötigen.

Beachten Sie jedoch, dass beim Packen von Java-Programmen alles in eine JAR-Datei gepackt wird. Dann wird Ihre derzeitige Vorgehensweise nicht funktionieren. Sie sollten sich die Ressourcen ansehen, die sich auf dem Klassenpfad befinden, unabhängig davon, ob Sie sich in Ihrer IDE befinden oder in der Produktion laufen (aber wo die Dateien von anderen Programmen nicht leicht zu sehen sind). Dies ist ein sehr häufiges Problem, mit dem neue Programmierer konfrontiert werden, so dass Sie jetzt genauso gut beginnen können, anstatt Ihr Programm später zu überarbeiten.

Verwandte Themen