我正在尝试将文件写入SDCard,但我在logcat中遇到错误:
01-24 09:03:33.647: W/System.err(3353): java.io.FileNotFoundException: /mnt/sdcard/fun/itisfun.txt: open failed: EACCES (Permission denied)
01-24 08:24:28.007: W/System.err(3353): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
01-24 09:03:33.756: W/System.err(3353):at libcore.io.Posix.open(Native Method)
这里是我写入SDCard的代码:
File root = null;
try {
// check for SDcard
root = Environment.getExternalStorageDirectory();
Log.i(TAG,"path.." +root.getAbsolutePath());
//check sdcard permission
if (root.canWrite()){
File fileDir = new File(root.getAbsolutePath()+"/fun/");
fileDir.mkdirs();
File file = new File(fileDir, "itisfun.txt");
FileWriter filewriter = new FileWriter(file);
BufferedWriter out = new BufferedWriter(filewriter);
out.write("I m enjoying......dude");
out.close();
}
} catch(...) {
...
}
清单:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<permission android:name="android.permission.INTERNET"></permission>
答案 0 :(得分:9)
要写入Sdcard,您需要在清单文件中授予权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 1 :(得分:4)
您需要确保已获得@Ram提及的许可,和已安装SD卡。您可以通过以下方式检查它是否已安装: -
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
您应该优雅地处理未安装的卡,但常见的问题是,如果您的手机通过USB线缆插入,可能是通过桌面操作系统安装的,这意味着它不是由Android安装的。
谢谢,
赖安
答案 2 :(得分:0)
这是我使用的一些代码,
public void yourMethod(){
File root = getDir(getApplicationContext());
try {
File fileDir = new File(root.getAbsolutePath()+"/fun/");
fileDir.mkdirs();
File file = new File(fileDir, "itisfun.txt");
FileWriter filewriter = new FileWriter(file);
BufferedWriter out = new BufferedWriter(filewriter);
out.write("I m enjoying......dude");
out.close();
} catch(...) {
...
}
}
public File getDir(Context context) {
if (android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED))
cacheDir = new File(
android.os.Environment.getExternalStorageDirectory(),
DIRECTORY_NAME);
else
cacheDir = context.getCacheDir();
return cacheDir;
}
如果没有外部存储,它基本上使用手机内部缓存(不适合大文件)
阅读this
答案 3 :(得分:0)
如果您使用的是4.4,请在此处阅读:http://www.androidcentral.com/kitkat-sdcard-changes基本上您无法再在驱动器上的任何位置进行读写操作。您只能写入您已成为其所有者的私人目录和目录。
答案 4 :(得分:-3)
fun
和文件itisfun.txt
是否存在于SD卡上,如果您想通过程序制作,则必须添加权限:<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
仅允许应用程序读取和写入已存在的文件。 <application>
标记之外,通常在其之前。