2011-07-13 5 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 \ CONFIG \ .xmlファイル(アクセスが拒否されまし ある)スタックトレースのjavax.xml.transform.TransformerException:。 java.io.FileNotFoundException: C:\はProgramData \ CONFIG \。。 xml(アクセスが は com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImplで com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(不明 出典)で)拒否されますcom。main.dr.a(不明な情報源) com..main.dr.a(不明な情報源) com..main.dr.a(不明な情報源) で.transform(不明な情報 ソース)com.main.dr.a com.main.hk(不明なソース) com.main.ay.run(不明なソース)原因: java.io.FileNotFoundException: C:\ ProgramData。\ config \ .xml(アクセスは が拒否されました)java.io.FileOutputStream.open(ネイティブメソッド)at java.io.FileOutputStream (不明なソース) java.io.FileOutputStream。 (Unknown Source)... 7 more --------- java.io.FileNotFoundException: java.io.FileOutputStream.openでC:¥ProgramData。¥config¥.xml(アクセスは が拒否されました) (ネイティブメソッド)at java.io.FileOutputStream。 (不明なソース) java.io.FileOutputStream。 (不明なソース) 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で、com.main.dr.a(不明な情報源)のトランスフォーム(不明な ソース)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: 「ファイルのアクセス許可」について言及していますが、 Windows Vista、Windows 7、およびServer 2008はすべて、ドライブのルート(EX: "c:\")またはシステムディレクトリ(EX: "c:\ windows"または "c:\ Program files")のものにアクセスするためのより厳しい規則を持っています。

+0

を試してみてください。このアプリケーションは自動的に初めて実行されます。次回実行するたびに、プログラムはC:\ ProgramDataの設定ファイルにアクセスできないため、アクセスは拒否されます。 –

+0

あなたは1)常に最初に正常に実行されますが、2)常に2回目以降に失敗すると言っていますか?それは "file in use"エラーのように聞こえます。おそらく、すべてのファイルを閉じているわけではないでしょうか?また、ここで見てください:http://xml.apache.org/xalan-j/faq.html: "なぜ私はfleが見つかりませんでしたか?" – paulsm4

+0

問題は "C:\ Program Data \ .."に関連するファイルアクセス許可です。 –

0

変換しようとしているファイルに値があり、有効であるかどうかを確認してください。

ループを使用してファイルのセットを反復処理している場合や、nullまたは""のような値を持たないファイルを変換しようとしたときに、何度か繰り返していることがあります。

6

ファイルオブジェクトをStreamResultに渡すのではなく、ファイルURI.getPath()を使用するように変更してみてください。

例えば、 StreamResult result = new StreamResult(anOutputFile.toURI().getPath());

0

は、私のアプリケーションは、Javaデスクトップアプリケーションです。この

file = new File(System.getProperty("user.dir") + "/YOURFILEADDRESS.xml"); 
関連する問題