我在最后一行代码中遇到异常 -
Transformer transformer = TransformerFactory.newInstance().newTransformer();
DOMSource xmlSource = new DOMSource(document);
StreamResult result;
File f = new File(sFilePath);
if (f.exists() == false) {
result = new StreamResult(f);
} else {
result = new StreamResult(sFilePath);
}
transformer.transform(xmlSource, result);
异常堆栈跟踪是 -
java.io.FileNotFoundException: C:\ ProgramData。\ config \ .xml(Access是 否认)stacktrace javax.xml.transform.TransformerException: java.io.FileNotFoundException: C:\ ProgramData。\ config \ .xml(Access是 否认) com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(未知 来源)at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(未知 来源)在com..main.dr.a(未知来源)at com..main.dr.a(未知来源)at com..main.dr.a(未知来源)at com..main.h.k(未知来源)at com..main.ay.run(未知来源)引起: java.io.FileNotFoundException: C:\ ProgramData。\ config \ .xml(Access是 拒绝)在java.io.FileOutputStream.open(Native Method)at java.io.FileOutputStream中。 (未知来源)at java.io.FileOutputStream中。 (未知来源)... 7更多--------- java.io.FileNotFoundException: C:\ ProgramData。\ config \ .xml(Access是 拒绝)在java.io.FileOutputStream.open(Native Method)at java.io.FileOutputStream中。 (未知来源)at java.io.FileOutputStream中。 (未知来源)at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(未知 来源)at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(未知 来源)在com..main.dr.a(未知来源)at com..main.dr.a(未知来源)at com..main.dr.a(未知来源)at com..main.h.k(未知来源)at com..main.ay.run(未知来源)和原因 isjava.io.FileNotFoundException: C:\ ProgramData。\ config \ .xml(Access是 拒绝)
答案 0 :(得分:7)
尝试更改它以使用文件URI.getPath()
,而不是仅将File对象传递到StreamResult。
例如。 StreamResult result = new StreamResult(anOutputFile.toURI().getPath());
答案 1 :(得分:1)
听起来像XML文件的文件权限,不是吗?
如果您是从Web上下文执行,请记住Web用户(例如,Linux / Apache下的“nobody”或Windows / IIS下的“IUSR_MACHINE”)具有访问文件系统的MINIMAL权限。
这是一件好事:特别是如果你的应用程序暴露在互联网上:)
PS: 此外,您引用的目录路径看起来不正确:
C:\ ProgramData \ config.xml中
。
你确定它不应该是“C:\ Program Data \ config.xml”????
PPS: 我们谈的是“文件权限”; Windows Vista,Windows 7和Server 2008都有更严格的规则来禁止访问驱动器根目录(EX:“c:\”)或系统目录(EX:“c:\ windows”或“c:\ Program files”)中的任何内容。
答案 2 :(得分:0)
尝试检查您尝试转换的文件是否具有值并且它们是否有效。
您可能正在使用循环迭代一组文件,有时您最终会尝试转换没有任何值的文件,例如null
或""
。
答案 3 :(得分:0)
试试这个
file = new File(System.getProperty("user.dir") + "/YOURFILEADDRESS.xml");