2016-06-03 21 views
0

In meinem Programm habe ich ein Speichern und Laden von System für Textdateien. Die Speicherfunktion funktioniert perfekt wie vorgesehen, aber das Laden gibt eine NullPointerException.java Finden Sie den Speicherort eines .jar, unabhängig davon, wo der Benutzer es setzt

Hier ist die Ladefunktion

String path = "C:\\Levels\\File.txt"; 
LevelHandler.loadLevel(path); 

Hier ist die loadLevel Funktion

public static void loadLevel(String file){ 
    String level = LevelLoader.loadFileAsString(file); 
    //other, unimportant, code 
} 

Und hier ist die loadFileAsString Funktion

public static String loadFileAsString(String file){ 
    StringBuilder builder = new StringBuilder(); 
    try { 
     InputStream in = LevelLoader.class.getResourceAsStream(file); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in)); 
     String line; 
     while((line = bufferedReader.readLine()) != null){ 
      builder.append(line + "\n"); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return builder.toString(); 
} 

Es scheitern, weil es für die Datei in der Klasse Ordner suchen ist unabhängig davon, in welches Verzeichnis ich mich beziehe. Wie kann ich den Standort von die .jar-Datei unabhängig davon, wo der Benutzer sie auf ihrem Computer platziert?

+0

Habe ich richtig verstanden? Du hast immer absoluten Pfad zur Datei, richtig? –

+0

@ RiĥardBrugekĥaim nein Ich habe nur das verwendet, um zu vermeiden, in die Eingabe zu gehen und wie es die Pfadzeichenfolge zusammen –

Antwort

0

können Sie die .jar im Zusammenhang Standort erhalten mit ./ ./ verwandten Pfad Ihres jar bietet

+0

näht so würde es so sein? Zeichenfolge path = "./File.txt"; –

+0

Ja, ./abc.txt bedeutet abc.txt-Dateien in demselben Ordner, in dem Ihre JAR-Datei vorhanden ist. –

+0

es funktioniert immer noch nicht. Ich habe ./jarname/levels/File.txt versucht, aber das funktioniert auch nicht. Gibt es eine Möglichkeit, auf Ordner im Jar zuzugreifen? –

0

Das Update kam ich mit war die Input

BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); 

Dies wird entfernen in der Lage sein, Dateien von jedem angegebenen Ort auf dem Computer zu lesen, aber immer noch nicht aus dem Jar. Es funktioniert jedoch perfekt mit ziemlich jedem anderen angegebenen Ort.