2010-01-07 76 views
4

我在數據創建文件/數據/ mypackage的/文件/:權限被拒絕:文件創建在... /文件

file = new File(getFilesDir() + "/file.txt"); 

我絕對相信,該文件被創建。
它創建後我打電話:

file.canWrite(); 

,結果是正確的。

當我嘗試使用該文件
我得到:「權限被拒絕」。
在Eclipse的DDMS,這個文件的權限是這樣的:

-rw------- 

誰能幫助嗎?

謝謝

回答

8

最簡單的方法來打開文件(並在同一時間創建它)將使用openFileOutput("file.txt", MODE_PRIVATE)方法。

這可以確保文件只能被您的應用程序讀取(與您目前使用的文件相同),並且會返回FileOutputStream,您可以開始寫入文件。

+2

NB。 Context對象上有openFileOutput和MODE_PRIVATE。 – teedyay 2010-03-19 15:54:04

3

權限對我來說看起來是正確的。每個應用程序都以不同的用戶身份運行,因此只能訪問它自己的文件。

當你說「我嘗試使用該文件」時,你是什麼意思?你可以發佈代碼,因爲我認爲這是問題所在。

+0

當我說「我嘗試使用該文件」時,我的意思是我想要安裝它。 實際上,我正在下載一個.apk並將其所有內容放入此文件中。由於內存空間的限制,我必須檢查是否可以在SD卡上創建此文件。如果沒有,我必須在'/ data/data/myPackage/files /'文件夾中創建它。 – Tsimmi 2010-01-08 12:38:08

1

如果您知道正在使用文件()創建的文件,你不希望使用openFileOutput(),那麼試試這個:

FileWriter fWriter; 
try { 
    fWriter = new FileWriter(file, true); 
    fWriter.write("hello"); 
    fWriter.close(); 
} catch (IOException e) { 
    // log error 
} 
0

我發現,對「/數據的寫/ data/myPackage/files /',需要設置
權限。

有MODE_WORLD_WRITEABLE,
那是一個與這種情況下的利益,
但即使有此權限集,我仍然有錯誤。

我想:「也許我需要的是一個EXECUTE許可...」。
還有就是API
中沒有這樣的權限,但即使我試圖把一個3 mode參數
(MODE_WORLD_WRITEABLE是= 2),
和...它的工作!

但是,當我寫SD卡與權限集,
我得到一個錯誤,以及,
所以我寫不同的兩個文件夾。

int permission = 3; 
if (whereToWrite == WRITE_TO_DATA_FOLDER) { 
    FileOutputStream fos = openFileOutput(file.getName(), permission); 
    buffOutStream = new BufferedOutputStream(fos); 

} else if (whereToWrite == WRITE_TO_SD_CARD){ 
    buffOutStream = new BufferedOutputStream(new FileOutputStream(file)); 
} 

順便說一下,
MODE_WORLD_WRITEABLE是錯誤的,
MODE_WORLD_WRITABLE是正確的。

9

確保您具有寫入文件的正確權限。在您的清單文件中,包含此行

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />. 
+1

不是。正如問題中給出的那樣,'data/data/myPackage/files /'指的是特定於應用程序的內部存儲,並且不需要任何特定的權限。你所指的權限只處理'/ sdcard/mnt/...'文件 – 2013-10-28 20:39:59

1

我一直在努力研究nullpointerexception,找不到文件,幾個小時的問題。我已經從模擬器轉移到實際的設備。在模擬器下面的工作:

BufferedWriter osw = new BufferedWriter(new FileWriter(path)); 

當我直接去設備雖然,我得到了例外。
Neelesh Gajender完美地解答了答案。增加::

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

在android manifest中完全解決了這個問題。我很感謝Neelesh和Kudos!