2010-09-15 117 views
3

我試圖從網上下載文件並將其寫入SD卡。我已啓用WRITE_EXTERNAL_STORAGE權限。該代碼失敗在這裏:FileNotFoundException +將文件寫入SD卡

OutputStream output = new FileOutputStream(filePath); 

09-15 19:40:31.630: WARN/System.err(7933): java.io.FileNotFoundException: /sdcard/artoo/Customerv08.apk 
09-15 19:40:31.630: WARN/System.err(7933):  at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:231) 
09-15 19:40:31.630: WARN/System.err(7933):  at java.io.FileOutputStream.<init>(FileOutputStream.java:96) 
09-15 19:40:31.630: WARN/System.err(7933):  at java.io.FileOutputStream.<init>(FileOutputStream.java:169) 
09-15 19:40:31.630: WARN/System.err(7933):  at java.io.FileOutputStream.<init>(FileOutputStream.java:147) 
09-15 19:40:31.640: WARN/System.err(7933):  at com.artoo.settings.InstallerActivity$ProgressDialogAsyncTask.doInBackground(InstallerActivity.java:148) 
09-15 19:40:31.640: WARN/System.err(7933):  at com.artoo.settings.InstallerActivity$ProgressDialogAsyncTask.doInBackground(InstallerActivity.java:1) 
09-15 19:40:31.640: WARN/System.err(7933):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
09-15 19:40:31.640: WARN/System.err(7933):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:256) 
09-15 19:40:31.640: WARN/System.err(7933):  at java.util.concurrent.FutureTask.run(FutureTask.java:122) 
09-15 19:40:31.640: WARN/System.err(7933):  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:648) 
09-15 19:40:31.640: WARN/System.err(7933):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:673) 
09-15 19:40:31.651: WARN/System.err(7933):  at java.lang.Thread.run(Thread.java:1060) 
09-15 19:40:31.670: WARN/InputManagerService(53): Window already focused, ignoring focus gain of: [email protected] 

我試圖寫入文件,並沒有從之前就存在。任何想法如何做到這一點?

+0

artoo目錄是否存在? – 2010-09-15 14:17:09

+0

你有沒有檢查過你的SD卡和文件(通過文件瀏覽器/瀏覽器)?你確定這個文件不在嗎? – WarrenFaith 2010-09-15 14:17:26

+0

是否使用'Environment.getExternalStorageDirectory()'獲取外部存儲的根目錄? – CommonsWare 2010-09-15 15:09:09

回答

8

您正在收到該錯誤,因爲指定的文件無法打開或不存在。這很簡單。

我總是先創建一個文件,並使用bufferedstream來寫,例如:

File file = new File(path, name); 
file.createNewFile(); 
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file), BUFFER); 
+0

此外,我還必須創建路徑:file_path.mkdirs() – 2010-09-16 07:56:27

+7

如果文件不存在,FileOutputStream會假設創建該文件。當然,它不應該創建父文件夾,但仍然應該創建該文件:「構造一個新的FileOutputStream,它將寫入路徑。如果該文件存在,則該文件將被截斷,如果該文件不存在,則會被創建。 http://developer.android.com/reference/java/io/FileOutputStream.html#FileOutputStream%28java.lang.String%29。所以這是一個錯誤! – Snicolas 2012-02-21 06:41:35

2

檢查您的許可清單文件,傢伙,

給你的應用程序的權限WRITE_EXTERNAL_STORAGE

+0

這對我很有用,我忘了在AndroidManifest.xml中添加此權限 – wangzhengyi 2014-11-25 06:56:30