首页 > 解决方案 > 无法在外部存储 USB 中创建文件?

问题描述

我一直在做一个项目,我必须在连接到 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() 获取路径之后,我检查了要插入的设备。但是当我创建一个新文件时,它总是给我无法创建目录的答案。请任何人都可以帮助我。

标签: androidandroid-external-storage

解决方案


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

授予权限

可能最好的办法是检查权限,并且只有在可用的情况下才使用存储逻辑,例如:

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.
 }

有关如何处理权限请求的更多详细信息,请参见此处。

另请注意,您可能需要使用您声明的文件夹,而不是:

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

你应该使用:

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

推荐阅读