无法在外部存储上写入文件

时间:2016-03-18 11:39:42

标签: android storage android-file

我想在外部存储上写文件,但它给了我错误:

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>

那么如何在外部存储卡上写这个文件呢?

1 个答案:

答案 0 :(得分:0)

您访问外部存储的以下行似乎有问题

 fileContact = new File("/mnt/media_rw/sdcard1/", "Backup/Contact");

某些设备制造商不使用sdcard1

始终按照这种方式访问​​外部storage

 String state = Environment.getExternalStorageState();

 File root = android.os.Environment.getExternalStorageDirectory();