2014-02-21 110 views
0

我必須爲學校做一個項目;遊戲而已。我從一個文本文件加載地圖。目前我使用掃描器來完成這項工作,但是我無法設法讓它在可運行JAR文件中工作,而無需將res文件放在JAR文件旁邊。我想在裏面找到文本文件;它與BufferedImages一起工作,但文本文件不起作用。我有這樣的代碼:Java讀取Runnable JAR文件中的文本文件錯誤

public String ReadTextFile(String path) throws IOException { 
    String HoldsText= null; 

    FileReader fr = new FileReader(getClass().getResource(path).toString()); 
    BufferedReader br = new BufferedReader(fr); 

    while((HoldsText = br.readLine())!= null){ 
     System.out.println(HoldsText); 
    } 

    return HoldsText; 
} 

路徑= 「RES /地圖/ Map2.txt」

錯誤:

文件結構
java.lang.NullPointerException 
at aMAZEing.TextManager.ReadTextFile(TextManager.java:22) 
at aMAZEing.Map.openFile(Map.java:89) 
at aMAZEing.Map.<init>(Map.java:31) 
at aMAZEing.Board.<init>(Board.java:50) 
at aMAZEing.Maze.<init>(Maze.java:24) 
at aMAZEing.Maze.main(Maze.java:15) 

:這似乎http://speedcap.net/sharing/screen.php?id=files/a9/77/a977e8b487f21e67db941a96087561cd.png

並不儘管工作。我研究了很多,但找不到任何對我有用的東西。我只需要一個字符串中的整個文本文件,其餘的很容易與子字符串等。

編輯!: 解決這個問題的方法是我的路徑已經存在,並且因此無法正常工作。我刪除了res並獲得了「/Maps/Map2.txt」作爲路徑,現在文件加載並且我的地圖再次顯示。

+0

如果粘貼孤單和錯誤的堆棧跟蹤。你在哪裏放置你的文件,路徑的值是什麼。星期一的部分也是沒有必要的。 –

+0

嘗試在路徑開始處添加一個斜槓(/)。 'path =「/res/Maps/Map2.txt」' –

+0

而不是'FileReader'使用'InputStreamReader',並將從類加載器獲得的'InputStream'傳遞給它。 –

回答

2
public static String ReadTextFile(String path) throws IOException{ 
    String HoldsText= null; 

    InputStream is = getClass().getResourceAsStream(path); 
    InputStreamReader fr = new InputStreamReader(is); 
    BufferedReader br = new BufferedReader(fr); 

    StringBuilder sb = new StringBuilder(); 
    while((HoldsText = br.readLine())!= null){ 
     sb.append(HoldsText) 
     .append("\n"); 
    } 

    return sb.toString(); 
} 

您需要添加的線條和使用InputStreamReader代替FileReader

+0

爲避免錯誤'不能對非靜態方法的靜態引用getClass()'改變'InputStream is = getClass()。getResourceAsStream(path);'通過'InputStream is = myClass.class .getResourceAsStream(路徑);' – Dani