解析 Java 中的大型 XML 文件时出现文件未找到异常
File Not Found Exception while parsing large XML File in Java
我正在使用 SAX(XML 的简单 API)来解析 XML 文档。该文档是一个巨大的 XML 文件(dblp.xml - 1.46 GB),我编写了几行解析器并在小文件上对其进行了测试并且它有效。
Sample.XML 和 Student.XML 是具有几行 XML 的小文件,我的解析器解析它们但是当我将路径更改为 dblp.XML 时它生成的文件不发现异常(文件与其他示例文件仍然存在,但它的大小很大)
这是我得到的异常:
java.io.FileNotFoundException: E:\Workspaces\Java\SaxParser\xml\dblp.dtd (The system cannot find the file specified)
这是我的代码:
package com.teamincredibles.sax;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Parser extends DefaultHandler {
public void getXml() {
try {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = saxParserFactory.newSAXParser();
final MySet openingTagList = new MySet();
final MySet closingTagList = new MySet();
DefaultHandler defaultHandler = new DefaultHandler() {
public void startDocument() throws SAXException {
System.out.println("Starting Parsing...\n");
}
public void endDocument() throws SAXException {
System.out.print("\n\nDone Parsing!");
}
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (!openingTagList.contains(qName)) {
openingTagList.add(qName);
System.out.print("<" + qName + ">\n");
}
}
public void characters(char ch[], int start, int length)
throws SAXException {
/*for(int i=start; i<(start+length);i++){
System.out.print(ch[i]);
}*/
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (!closingTagList.contains(qName)) {
closingTagList.add(qName);
System.out.print("</" + qName + ">");
}
}
};
saxParser.parse("xml/dblp.xml", defaultHandler);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
Parser readXml = new Parser();
readXml.getXml();
}
}
我怎么搞不明白
您的 XML 文件是否引用了 DTD,在本例中为 "dblp.dtd"。
如果是,检查它是否在位置 "E:\Workspaces\Java\SaxParser\xml\"。如果没有把它放在位置和 运行 你的代码。
我正在使用 SAX(XML 的简单 API)来解析 XML 文档。该文档是一个巨大的 XML 文件(dblp.xml - 1.46 GB),我编写了几行解析器并在小文件上对其进行了测试并且它有效。
Sample.XML 和 Student.XML 是具有几行 XML 的小文件,我的解析器解析它们但是当我将路径更改为 dblp.XML 时它生成的文件不发现异常(文件与其他示例文件仍然存在,但它的大小很大) 这是我得到的异常:
java.io.FileNotFoundException: E:\Workspaces\Java\SaxParser\xml\dblp.dtd (The system cannot find the file specified)
这是我的代码:
package com.teamincredibles.sax;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Parser extends DefaultHandler {
public void getXml() {
try {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = saxParserFactory.newSAXParser();
final MySet openingTagList = new MySet();
final MySet closingTagList = new MySet();
DefaultHandler defaultHandler = new DefaultHandler() {
public void startDocument() throws SAXException {
System.out.println("Starting Parsing...\n");
}
public void endDocument() throws SAXException {
System.out.print("\n\nDone Parsing!");
}
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (!openingTagList.contains(qName)) {
openingTagList.add(qName);
System.out.print("<" + qName + ">\n");
}
}
public void characters(char ch[], int start, int length)
throws SAXException {
/*for(int i=start; i<(start+length);i++){
System.out.print(ch[i]);
}*/
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (!closingTagList.contains(qName)) {
closingTagList.add(qName);
System.out.print("</" + qName + ">");
}
}
};
saxParser.parse("xml/dblp.xml", defaultHandler);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
Parser readXml = new Parser();
readXml.getXml();
}
}
我怎么搞不明白
您的 XML 文件是否引用了 DTD,在本例中为 "dblp.dtd"。
如果是,检查它是否在位置 "E:\Workspaces\Java\SaxParser\xml\"。如果没有把它放在位置和 运行 你的代码。