【问题标题】:FileNotFoundException + Writing a File to SD CardFileNotFoundException + 将文件写入 SD 卡
【发布时间】:2011-04-12 17:16:19
【问题描述】:

我正在尝试从网上下载文件并将其写入 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

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

【问题讨论】:

  • artoo目录存在吗?
  • 您是否检查过您的 SD 卡和文件(通过文件资源管理器/浏览器)?您确定该文件不存在吗?
  • 您是否使用Environment.getExternalStorageDirectory() 获取外部存储的根?
  • @All,很抱歉造成混乱。该文件不存在,我认为 OutputStream 会直接处理它。在使用 OutputStream 之前,我必须创建 filePath 和文件

标签: android file-io sd-card


【解决方案1】:

您收到该错误是因为指定的文件无法打开或不存在。就这么简单。

我之前总是创建一个文件并使用缓冲流写入它,例如:

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

【讨论】:

  • 此外,我还必须创建路径:file_path.mkdirs()
  • FileOutputStream 假设在文件不存在时创建该文件。当然,它不应该创建父文件夹,但仍然应该创建文件:“构造一个写入路径的新 FileOutputStream。如果文件存在,将被截断,如果不存在则创建。” developer.android.com/reference/java/io/…。所以这是一个错误!
【解决方案2】:

在 Manifest 文件中检查您的权限,伙计,

为您的应用授予 WRITE_EXTERNAL_STORAGE 权限

【讨论】:

  • 这对我有用,我忘了在AndroidManifest.xml中添加这个权限
猜你喜欢
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 2017-07-09
相关资源
最近更新 更多