2015-11-09 20 views
1

我試圖將我的應用程序的數據存儲到/ Library/Application Support/myAppFolder。寫入OSX /庫/應用程序支持文件夾會拋出IOException異常:權限被拒絕

我與此代碼試圖(通過調試)

String content = "This is the content to write into file"; 

File file = new File("/Library/Application Support/filename.txt"); 


      // if file doesnt exists, then create it 
      if (!file.exists()) { 
       file.mkdir(); 
        file.createNewFile(); 
      } 

      FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
      BufferedWriter bw = new BufferedWriter(fw); 
      bw.write(content); 
      bw.close(); 

      System.out.println("Done"); 

但產生java.io.IOException:權限被拒絕被拋出。

回答

1

讓我們開始...

if (!file.exists()) { 
    file.mkdir(); 
    file.createNewFile(); 
} 

FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
BufferedWriter bw = new BufferedWriter(fw); 

您創建一個名爲/Library/Application Support/filename.txt目錄,然後嘗試創建一個名爲/Library/Application Support/filename.txt文件,然後試圖讀取所述文件...這是一個目錄...

讓我們假設您實際上擁有/Library/Application Support的讀/寫權限,filename.txt是一個目錄,因此任何試圖將其視爲文件的嘗試都將失敗。

然而,

File file = new File("/Library/Application Support/filename.txt"); 

也許應該是...

File file = new File(System.getProperty("user.home") + "/Library/Application Support/filename.txt"); 

這樣你會被寫入當前用戶的主目錄,你就更有可能具有讀/寫入權限。

此外,您file應指向您的應用程序目錄(而不是文件)

File file = new File(System.getProperty("user.home") + "/Library/Application Support/Your Application Directory"); 

那麼你可以使用更多的東西一樣......

if (file.exists() || file.mkdir()) { 
    file = new File(file, "filename.txt"); 
    file.createNewFile(); 
} 

現在你可以使用file (因爲它現在指filename.txt裏面System.getProperty("user.home") + "/Library/Application Support/Your Application Directory"

+0

..謝謝很多! – user2468425

+0

@ l'l l是的,這是我的假設,因此建議使用'System.getProperty(「user.home」)'作爲路徑的前綴 – MadProgrammer

相關問題