无法在外部存储USB中创建文件?

时间:2019-02-13 08:10:42

标签: android android-external-storage

我一直在从事一个项目,在该项目中,我必须将文本文件存储在连接到android设备的外部USB上。我在清单文件中授予了READ_EXTERNAL_STORAGE / WRITE_EXTERNAL_STORAGE权限。这是我所做的。

 boolean Available= false;
    String state = Environment.getExternalStorageState();
    if(Environment.MEDIA_MOUNTED.equals(state)){
        // Both Read and write operations available
        Available= true;
    } else {
        // SD card not mounted
        Available = false;
    }
    if(Available) {


        File f = new File(Environment.getExternalStorageDirectory() +     
    "/file");
        if (!f.exists())
            if (!f.mkdir()) {
                Toast.makeText(this, myfolder + " can't be created.", 
         Toast.LENGTH_SHORT).show();

            } else
                Toast.makeText(this, myfolder + " can be created.", 
         Toast.LENGTH_SHORT).show();
    }

在尝试通过调用Environment.getExternalStorageDirectory()获取路径之后,我检查了是否要插入设备。但是,当我创建一个新文件时,它总是提示我无法创建目录。请任何人都可以帮助我。

2 个答案:

答案 0 :(得分:1)

不确定您在注释中提到的堆栈跟踪错误,但是如果您在设置中授予权限,则代码应该可以工作。

Grant permission

也许最好的办法是检查许可,并且只有在可用时才进行存储逻辑操作,例如:

boolean Available = false;
 if (ContextCompat.checkSelfPermission(this,
   Manifest.permission.WRITE_EXTERNAL_STORAGE) != 
      PackageManager.PERMISSION_GRANTED) {
   Toast.makeText(this, "Grant the external storage permission first!",
                    Toast.LENGTH_SHORT).show();
 } else {
   // then do your rest of the storage checks and logic.
 }

有关如何处理权限请求的详细信息,请参见here

还请注意,您可能应该使用声明的文件夹,而不是:

File f = new File(Environment.getExternalStorageDirectory() +     
    "/file");

您应该使用:

File f = new File(myfolder, "file");

答案 1 :(得分:0)

除了@Dan提供的答案以向代码添加运行时权限外,您还需要为android 7.0及更高版本设置文件提供程序。您需要添加以下更改。

manifest.xml

中添加它
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.yourappname.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true" >
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/my_paths" />
</provider>

my_paths.xml文件夹中创建res/xml/

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="files" path="." />
</paths> 

检查documentation以获得更多信息。