2014-02-21 91 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