我在读取由下面的类创建的 XML 文件时遇到问题。我相信这里有一些属性需要设置才能使用正确的文件目录。生成的 XML 文件:
<?xml version="1.0" encoding="WINDOWS-1252"?>
<!DOCTYPE log SYSTEM "logger.dtd">
如果删除包含 "logger.dtd"的行,则可以读取顶部的 。有人能解释一下发生了什么事吗?我正在从使用 SAXParser API 设置的同一 URI 进行读取。我按照此处的 SAX 解析说明进行操作:http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/
package logging;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import java.util.logging.XMLFormatter;
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 Log {
static private FileHandler fileTxt;
static private SimpleFormatter formatterTxt;
static private FileHandler fileXML;
static private XMLFormatter formatterXML;
static public void setup(Logger theLogger) throws IOException{
Logger logger = theLogger;
logger.setLevel(Level.ALL);
fileTxt = new FileHandler("C:\\Temp\\logging.txt");
fileXML = new FileHandler("C:\\Temp\\XMLLogging.xml");
formatterTxt = new SimpleFormatter();
fileTxt.setFormatter(formatterTxt);
logger.addHandler(fileTxt);
formatterXML = new XMLFormatter();
fileXML.setFormatter(formatterXML);
logger.addHandler(fileXML);
for(Handler h: logger.getHandlers()){
System.out.println(h.getFormatter());
}
}
}
最佳答案
虽然这个问题已经有一段时间了,但是,我遇到了这种情况,不得不努力寻求解决方案。我发现了这个,如果它也适用于其他人,可能是这样的
@Override
public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
if (systemId.contains("log4j.dtd")) {
return new InputSource(new StringReader(""));
} else {
return null;
}
}
实现此方法并提及您的 dtd 名称,它应该继续进行,没有任何异常。
关于java - 无法读取 XMLFile,异常 : java. io.FileNotFoundException : C:\Temp\logger. dtd(系统找不到指定的文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17976268/