2010-08-23 218 views
2

我M個接入從Java應用程序文件,但即時得到以下異常(ACCES拒絕)拒絕訪問異常

 
c:\Program Files\sample\sample\cample.xml (Acc?s refus?)   
at java.io.FileOutputStream.(Unknown Source) 
at java.io.FileOutputStream. 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source)  
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 

是任何機構有任何想法,爲什麼這個異常發生這個......,解決方案。 ... 它與文件許可手段文件有沒有讀取權限有關。

+0

* 「文件沒有讀取權限。」 * >>這將是*寫*許可,因爲'FileOutputStream'指:輸出,因此,寫作。 – Abel 2010-08-23 06:23:19

回答

1

此例外意味着您正在運行您的應用程序的帳戶對該文件沒有寫入權限。您將需要爲您正在嘗試寫入的文件授予必要的權限。另一種選擇是將該文件放入另一個文件夾,在該文件夾中您具有必要的權限。

+0

或者到目錄,爲了創建文件。你確定要「cample.xml」(不是「sample.xml」)嗎? – Thilo 2010-08-23 06:15:08

+0

如果用戶在這個位置創建了一個文件,那麼我們將該文件編程移動到另一個位置,如temp,%APPDATA%,這是否正確。 – raji 2010-08-23 07:45:55

+0

@raji:用戶無法在該位置創建文件,因爲他收到了「AccèsRefusé」。但是當錯誤發生時,您可以向用戶建議另一個位置(例如'%APPDATA%'的確如此,另請參閱我對此問題的看法)。 – Abel 2010-08-23 07:54:12

2

由於我對法語的知識有限,我認爲「Acc?s拒絕?」在你的系統上,「Accèsrefusé?」或類似的東西。這意味着:「拒絕訪問」。換句話說,你的Java程序不允許去你提到的位置。

考慮到位置在c:\program files以下,Windows Vista及更高版本確實禁止該位置。最好在%APPDATA%或其他您有寫入權限的地方選擇一個位置。

請注意,由於安全原因,Windows會嘗試防止寫入微妙的位置。即使您通過將帳戶更改爲管理員而獲得了正確的權利,您仍然不應將數據,設置,文件等放在Program Files下。相反,它應該在當前用戶或默認用戶的應用程序數據目錄下。在Java中,你可以get this path as follows

// get application path 
System.getenv("APPDATA"); 
+0

「程序文件」的位置確實可能是問題所在。我曾經犯過在「Program Files」下安裝apache web服務器的錯誤。從那以後,即使使用一個簡單的文本編輯器,它總是會給應用到'httpd.conf'的變更帶來挑戰... – 2010-08-23 06:23:45

+0

@Andreas_D:Windows上的兩個提示:(1)右鍵點擊你的編輯器(甚至記事本)並選擇*以管理員身份運行*,(2)更改'httpd.conf'的位置(必須在註冊表或命令行的批處理文件中完成)。我使用後者非常滿意(從來不喜歡可執行文件旁邊的httpd.conf)。 – Abel 2010-08-23 06:36:13