【问题标题】:Java Reading textfile in Runnable JAR file ERRORJava 读取可运行 JAR 文件中的文本文件错误
【发布时间】:2014-02-22 00:09:48
【问题描述】:

我必须为学校做一个项目;游戏而已。我从文本文件加载地图。目前我使用扫描仪进行此操作,但如果不将 res 文件放在 JAR 文件旁边,我无法让它在 Runnable JAR 文件中工作。我想得到里面的文本文件;它适用于 BufferedImages,但文本文件不起作用。我有这个代码:

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;
}

path = "res/Maps/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”作为路径,现在文件加载并再次显示我的地图。

【问题讨论】:

  • 如果存在错误,请粘贴堆栈跟踪。您将文件放在哪里以及path 的值是多少。也不需要关于星期一的部分。
  • 尝试在路径的开头添加斜杠 (/)。 path = "/res/Maps/Map2.txt"
  • 使用InputStreamReader 代替FileReader,并将从类加载器获取的InputStream 传递给它。
  • 还是不行,我已经尝试将“/”be4 res/Maps/Map2.txt 和 FileReader 替换为 InputStreamReader 和 InputStream
  • 您的文件名是小写的map2.txt,尽管这可能没什么区别。您使用的是哪个操作系统?

标签: java jar executable-jar


【解决方案1】:
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

【讨论】:

  • 为了避免错误 Cannot make a static reference to the non-static method getClass()InputStream is = getClass().getResourceAsStream(path); 更改为 InputStream is = myClass.class.getResourceAsStream(path);
猜你喜欢
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 2012-10-09
  • 1970-01-01
  • 2014-01-15
相关资源
最近更新 更多