javax.xml.transform.TransformerException:java.io.FileNotFoundException:<file_name>(访问被拒绝)</file_name>

时间:2011-07-13 07:07:52

标签: java parsing dom file-io xerces

我在最后一行代码中遇到异常 -

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是   拒绝)

4 个答案:

答案 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");