2013-10-24 61 views
20

我有以下代碼:訪問被拒絕java.io.FileNotFoundException

List<FileItem> items = uploadHandler.parseRequest(request); 
for (FileItem item : items) { 
    if (!item.isFormField()) { 
     File file = new File("D:/Data"); 
    } 
} 

當我試圖保存文件時,我收到以下錯誤

java.io.FileNotFoundException: D:\Data (Access is denied.) 

可能是什麼原因,我該如何解決這個問題?我對此文件夾具有讀寫權限。

+0

看目錄是否爲出現在「D:/ Data」 –

+2

我想這是因爲你試圖在'for'循環的每次迭代中打開相同的文件。 – Francis

+0

很難說如果沒有看到實際上保存文件的代碼,或者沒有編譯和重現問題的代碼,但我猜測可能文件已經存在(或者存在一個名稱)?另外請注意,在Windows上文件不區分大小寫。 –

回答

44

當你調用新的文件你都應該給文件名,不僅要放置文件的目錄。

的東西嘗試像

File file = new File("D:/Data/" + item.getFileName()); 
15

不完全的情況下,這個問題,但可以幫助。 當我對新文件調用mkdirs(),而不是它的父

File file = new java.io.File(path); 
//file.mkdirs(); // wrong! 
file.getParentFile().mkdirs(); // correct! 
if (!file.exists()) { 
    file.createNewFile(); 
} 
5

您需要設置權限的用戶控件我得到這個例外。

  1. 轉到C:\ Program Files文件\
  2. 右鍵單擊Java文件夾,單擊屬性。選擇安全選項卡。
  3. 在那裏,點擊「編輯」按鈕,這將彈出PERMISSIONS FOR JAVA窗口。
  4. 點擊添加,將彈出一個新窗口。在此,在「輸入對象名稱」框中,輸入您的用戶帳戶名稱,然後單擊「 」(如果已存在,請跳過此步驟)。
  5. 現在在「PERMISSIONS OF JAVA」窗口中,您將看到幾個可點擊的 選項,如CREATOR OWNER,SYSTEM,其中包括您的 用戶名。點擊它,並勾選 子窗口的權限中的FULL CONTROL選項。
  6. 最後,點擊適用和好吧。
+0

這將更改Java可執行文件本身的權限。沒有理由這樣做。 –

3

我尋找這個問題,我得到了如下回答:

  1. "C:\Program Files\Apache-tomcat-7.0.69\" 刪除多餘的反斜槓(\
  2. 右鍵單擊日誌文件夾中的tomcat的文件夾,並在安全選項卡中給予此文件夾作爲寫入權限,然後以管理員身份重新啓動net-beans作爲運行。

您的問題將得到解決

3

確保目錄存在,您有權限訪問該文件的路徑添加到寫日誌:

File file = new File("D:/Data/" + item.getFileName());