2011-07-13 47 views
2

我在代码最后一行越来越例外 -javax.xml.transform.TransformerException中:java.io.FileNotFoundException:<file_name>(访问被拒绝)

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 \配置\ .XML(Access是 拒绝)堆栈跟踪javax.xml.transform.TransformerException中: java.io.FileNotFoundException: C:\ ProgramData \配置\。 xml(访问被拒绝 )在 com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(未知 来源)在 com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl (未知来源)在 com ..main.dr.a(未知来源)在 com ..main.dr.a(未知来源)在 com..main.hk(Unknown Source)at com..main.ay.run(Unknown Source)引起者: java.io.FileNotFoundException: C:\ ProgramData。\ config \ .xml(Access is denied )在java.io.FileOutputStream.open(Native Method)处,位于 java.io.FileOutputStream。 (Unknown Source) java.io.FileOutputStream。 (未知源)... 7更多--------- java.io.FileNotFoundException: C:\ ProgramData。\ config \ .xml(访问是 denied)java.io.FileOutputStream.open (本机方法) java.io.FileOutputStream。 (Unknown Source) java.io.FileOutputStream。 (Unknown Source) com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(Unknown Source)at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl。转换(Unknown Source)at com..main.dr.a(Unknown Source)at com..main.dr.a(Unknown Source)at com..main.dr.a(Unknown Source)at com ..main.hk(未知来源)在 com..main.ay.run(未知来源)和原因 isjava.io.FileNotFoundException: C:\ ProgramData \ \ config \ .xml(访问被拒绝的 )

回答

1

听起来像你的XML文件的文件权限,不是吗?

如果您是从Web上下文执行的,请记住Web用户(例如,Linux/Apache下的“nobody”或Windows/IIS下的“IUSR_MACHINE”)具有访问文件系统的MINIMAL权限。

这是一件好事:特别是如果你的应用程序被暴露在互联网:)

PS: 另外,你提到的目录路径不看的权利:

C: \ ProgramData \ config.xml

你确定它不应该是“C:\ Program Data \ config.xml”吗?

PPS: 当我们谈论“文件权限”时,对于访问驱动器根目录(EX:“c:\”)或系统目录(EX:“c:\ windows”或“c:\ Program files”)中的任何内容,Windows Vista,Windows 7和Server 2008都有更严格的规则。

+0

我的应用程序是Java桌面应用程序。此应用程序自动运行第一次。无论何时用户下次运行它,它都会抛出Access被拒绝,因为程序无法访问C:\ ProgramData中的配置文件。 –

+0

那么你是说1)它总是第一次成功运行,但2)它总是在第二次和以后失败?这听起来像“文件正在使用”错误。也许你没有关闭所有的文件(在“最后”)?还有:看这里:http://xml.apache.org/xalan-j/faq.html:“为什么我找不到'找不到'?” – paulsm4

+0

问题是“C:\ Program Data \ ..”中的相关文件权限。 –

0

尝试检查您尝试转换的文件是否具有值并且它们是有效的。

可能是您正在使用循环遍历一组文件,并且有时候您最终试图转换没有任何值的文件,如null""

6

尝试将其更改为使用文件的URI.getPath(),而不是将File对象传递给StreamResult。

例如。 StreamResult result = new StreamResult(anOutputFile.toURI().getPath());

0

尝试这

file = new File(System.getProperty("user.dir") + "/YOURFILEADDRESS.xml");