【发布时间】:2012-10-15 22:25:36
【问题描述】:
在尝试将文件写入 sdcard 时,我收到 java.io.FileNotFoundException: /filename (Read-only file system) 异常。可悲的是,这里发布的许多解决方案都没有帮助我。我已设置权限,外部存储处于 MEDIA_MOUNTED 状态。
这是有问题的代码:
Log.i("STORAGE", Environment.getExternalStorageState());
OutputStream fos = new FileOutputStream(Helpers.StripExtension(filePath) + ".blk");
fos.write(digest.getBytes());
fos.close();
filePath 来自文件代码。我要做的是从选定的文件中读取,然后保存另一个具有相同名称、不同扩展名和其中一些内容的文件。
清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mypackagename"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:theme="@android:style/Theme.Black" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Logcat:
10-25 18:24:34.330: I/FILEPATH(1989): /mnt/sdcard/Untitled.txt
10-25 18:24:34.360: I/STORAGE(1989): mounted
10-25 18:24:34.360: W/System.err(1989): java.io.FileNotFoundException: /mnt/sdcard/Untitled.blk (Read-only file system)
10-25 18:24:34.360: W/System.err(1989): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
10-25 18:24:34.360: W/System.err(1989): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
10-25 18:24:34.360: W/System.err(1989): at java.io.FileOutputStream.<init>(FileOutputStream.java:94)
10-25 18:24:34.360: W/System.err(1989): at java.io.FileOutputStream.<init>(FileOutputStream.java:165)
10-25 18:24:34.360: W/System.err(1989): at java.io.FileOutputStream.<init>(FileOutputStream.java:144)
我在真实设备上运行它,而不是 avd。我已经尝试重新启动我的设备并重建项目。 OfficeSuite 等应用程序可以毫无问题地写入此位置。
设备:搭载 Android 2.3.7 (CyanogenMod 7) 的 ZTE Blade
【问题讨论】:
-
您是否尝试将其写入目录而不是 sd 卡的根目录? String withDir = Environment.getExternalStorageState() + "/someDir/" + fileName;文件文件 = 新文件(withDir);文件.mkdirs();或类似的...
-
主要问题是:为什么您的 sdcard 被安装为只读?您使用哪种设备?哪个安卓版本?
-
我也遇到过类似的情况,是 SD 卡坏了。事情是,有些程序可以工作,但发现在重新启动时对 sdcard 的任何更改都没有坚持,所以我假设它被接受到缓冲区中,但缓冲区永远无法刷新和写入它出来,给人一种它在那里的错觉,而实际上它并不存在
-
@WarrenFaith 有趣的是
Environment.getExternalStorageState()说它安装为 rw(根据developer.android)。我会用系统规格更新我的问题。 -
@DrakeClarris 所说的也可能是您的情况。如果可能,请更改 SD 卡。您应该检查的另一种可能性是模拟器和运行股票 android 的设备。 CM 可能很好,但我也会尝试检查其他 android rom。