我正在尝试使用FileOutputStream
和OutputStreamWriter
编写文件,但我一直收到只读警告。
以下是我正在使用的代码
FileOutputStream fw = new FileOutputStream((trackName.replaceAll(" ", ""))+".gpx", true);
OutputStreamWriter osw = new OutputStreamWriter(fw);
osw.write(XML_HEADER+"\n");
osw.write(TAG_GPX+"\n");
writeTrackPoints(trackName, osw, locations, time, trackDescp);
writeWayPoints(osw, locations,time);
osw.flush();
osw.close();
Logcat
输出
java.io.FileNotFoundException: /test.gpx (Read-only file system)
at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
at java.io.FileOutputStream.<init>(FileOutputStream.java:97)
at java.io.FileOutputStream.<init>(FileOutputStream.java:168)
at java.io.FileOutputStream.<init>(FileOutputStream.java:147)
at com.fyp.run_race.GPXFileWriter.<init>(GPXFileWriter.java:25)
at com.fyp.run_race.GPSTrackDetails$1.onClick(GPSTrackDetails.java:58)
at android.view.View.performClick(View.java:2408)
at android.view.View$PerformClick.run(View.java:8816)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
我确定问题是什么。
答案 0 :(得分:7)
Dunno为什么Pratik的评论被低估了 - 他是对的,因为你希望获得写入外部存储的许可。假设你想写的地方。
Devconsole也是对的;您不能只写任何文件名,大部分文件系统都被锁定并且只读。
要写入外部存储(sdcard)中的任意位置,请使用getExternalStorageDirectory()作为外部存储的根目录。还可以使用getExternalStorageState()确认外部存储实际可用。
不要将文件放在外部存储的根目录中;将它们放在子目录中以防止根变得太杂乱。 (编辑:并且一些Android实现无论如何都不会让你这样做。)
使用getExternalFilesDir()获取外部存储空间中的位置,该位置名义上属于您的应用程序。 (API 8新增内容)
使用getFilesDir()获取/ data /下的位置,您可以在其中编写应用程序专用文件。这不是外部存储,因此空间紧张;不要在这里写大文件。
另见:
答案 1 :(得分:5)
您只能将文件写入内部存储(设备存储器)或外部存储(SD卡),请参阅http://developer.android.com/guide/topics/data/data-storage.html。只需打开一个带有任意文件名的FileOutputStream就行不通,因为该文件系统是只读的。
答案 2 :(得分:3)
只需在清单中给予许可
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>