FileNotFoundException +将文件写入SD卡

Sam*_*gal 3 file-io android sd-card

我正在尝试从网上下载文件并将其写入SD卡.我启用了WRITE_EXTERNAL_STORAGE权限.代码在这里失败:

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: com.android.internal.view.IInputMethodClient$Stub$Proxy@43868480
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写该文件,它从以前不存在.关于如何做到这一点的任何想法?

Mil*_*lan 8

您收到该错误,因为指定的文件无法打开或不存在.这很简单.

我总是先创建一个文件并使用bufferedstream写入它,例如:

File file = new File(path, name);
file.createNewFile();
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file), BUFFER);
Run Code Online (Sandbox Code Playgroud)

  • 如果文件不存在,则假定FileOutputStream创建该文件.当然,它不应该创建父文件夹,但仍然应该创建文件:"构造一个写入路径的新FileOutputStream.如果文件存在则将被截断,如果文件不存在则会被创建." http://developer.android.com/reference/java/io/FileOutputStream.html#FileOutputStream%28java.lang.String%29.所以这是一个错误! (7认同)