2011-07-13 54 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");