【问题标题】:How to read text from an inputstream, formatted as XML, with a BufferedReader.readLine() method?如何使用 BufferedReader.readLine() 方法从格式为 XML 的输入流中读取文本?
【发布时间】:2012-03-09 06:50:56
【问题描述】:

我有一个 xml 文件,我将其作为资源包含在我的 netbeans 项目中。

现在,我尝试使用输入流阅读器逐行阅读:

static InputStream nudeMap = Main.class.getResourceAsStream("overlay_map_2007.txt");

static BufferedReader br = new BufferedReader(new InputStreamReader(nudeMap,"UTF-8"));

=> 这遇到了错误:

Exception in thread "Thread-4" java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:61)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:80)

我检查了文件的编码,确实是UTF-8,所以我认为不是编码问题。我在这里没有经验,但我怀疑这可能来自文件实际上是 xml 格式的事实。第一行是:

<?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns:viz="http:///www.gexf.net/1.1draft/viz" version="1.1" xmlns="http://www.gexf.net/1.1draft">

我的意思是,我不想为我对文件的使用编写解析器。您对我如何将其作为普通的旧文本文件读取而没有错误有任何线索吗?谢谢!

[编辑]:明确:我想用 br.readLine(); 读取这个文件不使用 Java 解析器!

【问题讨论】:

  • 您确定文件在构建后位于类路径中的正确位置吗? / 不对 XML 使用 XML 解析器是个坏主意。

标签: java xml netbeans inputstream


【解决方案1】:

在我看来,您的文本文件没有被找到。换句话说,我猜getResourceAsStream 正在返回null,而这个空值会导致你得到 NullPointerException。

您项目中的overlay_map_2007.txt 文件在哪里?

如果此文件不在“默认”包中,则您需要“限定”资源的名称。例如,如果它位于文件夹 com.example.myproject 中,则资源名称将为 com/example/myproject/overlay_map_2007.txt

【讨论】:

    【解决方案2】:

    我认为你甚至不必走那么远。一个简单的谷歌搜索产生了这个带有 DOM 解析器的很好的例子:

    http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

    反对 DOM,然后是 SAX:

    http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/

    【讨论】:

    • 没有看到“asAStream”部分……这个怎么样? mkyong.com/java/how-to-read-utf-8-xml-file-in-java-sax-parser
    • 嗨,我编辑了这个问题,以表明我对 xml 解析器不感兴趣。我只是想使用经典的 bufferedReader.readLine() 方法:是否可以在 xml 格式的文件上使用?它可能是我得到的这个空指针异常的来源吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 2018-02-10
    • 2013-07-16
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多