我想在外部存储上写文件,但它给了我错误:
java.io.FileNotFoundException: /mnt/media_rw/sdcard1/Backup/Contact/18-03-2016 16:03:17.vcf: open failed: EACCES (Permission denied)
我的代码:
fileContact = new File("/mnt/media_rw/sdcard1/", "Backup/Contact");
if (!fileContact.exists()) {
fileContact.mkdirs();
}
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:MM:ss");
String strDate = sdf.format(c.getTime());
StoragePath = fileContact.getAbsolutePath() + "/" + strDate + ".vcf";
当我写fileContact = new File("/sdcard/", "/Backup/Contact");
时,它会在internal storage
中写入文件。我想在memory card(external sdcard)
上写这个文件。
我从这段代码获取所有挂载/外部存储列表 - http://stackoverflow.com/a/19982338/3774906
,它给了我完美的列表。
清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="com.xxx.xx"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-feature android:name="android.hardware.usb.host"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:autoRemoveFromRecents="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
那么如何在外部存储卡上写这个文件呢?
答案 0 :(得分:0)
您访问外部存储的以下行似乎有问题
fileContact = new File("/mnt/media_rw/sdcard1/", "Backup/Contact");
某些设备制造商不使用sdcard1
始终按照这种方式访问外部storage
String state = Environment.getExternalStorageState();
File root = android.os.Environment.getExternalStorageDirectory();