Android:如何在外部(可移动)SD卡中创建文件夹和文件?

Android:如何在外部(可移动)SD卡中创建文件夹和文件?,android,android-sdcard,android-external-storage,Android,Android Sdcard,Android External Storage,我试图通过应用程序在外部存储目录中创建文件夹和文件 File f = new File("/storage/emulated/0", mFileName); boolean isCreated = f.mkdir(); 这总是成功的,并且isCreated为true,没有任何异常或警告,并且创建了文件夹 getExternalStorageDirectory()也返回“/storage/emulated/0” 但当我尝试在外部存储卡(可移动存储卡)中创建文件夹时,如下所示:

我试图通过应用程序在外部存储目录中创建文件夹和文件

    File f = new File("/storage/emulated/0", mFileName);
    boolean isCreated = f.mkdir();
这总是成功的,并且isCreated为true,没有任何异常或警告,并且创建了文件夹

getExternalStorageDirectory()也返回“/storage/emulated/0”

但当我尝试在外部存储卡(可移动存储卡)中创建文件夹时,如下所示:

    File f = new File("/storage/6161-3165", mFileName);
     boolean isCreated = f.mkdir();
    **02-22 14:50:47.551 13536-13536/com.testapp.extsd W/System.err: mkdir failed: EACCES (Permission denied) : /storage/6161-3165/uyyyy**
始终f.mkdir()返回false,并且未创建文件夹。 同时我可以看到W/System.err:。。。在logcat中,如下所示:

    File f = new File("/storage/6161-3165", mFileName);
     boolean isCreated = f.mkdir();
    **02-22 14:50:47.551 13536-13536/com.testapp.extsd W/System.err: mkdir failed: EACCES (Permission denied) : /storage/6161-3165/uyyyy**
我在清单文件中提到了写入外部存储权限。“静止”文件夹未创建

我想知道如何在外部存储卡中创建文件夹和文件

my mobile中存储的文件结构为:

shell@j7xelte:/storage $ ls -l
drwxrwx--x root     sdcard_rw          2017-02-05 07:59 6161-3165
drwx--x--x root     sdcard_rw          2016-01-01 17:34 emulated
drwxr-xr-x system   system            2017-02-05 07:59 enc_emulated
drwxr-xr-x root     root              2017-02-05 07:59 self
shell@j7xelte:/存储器$


等待响应…

首先,您必须向AndroidManifest添加一些权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
另外,对于Android>6,您必须调用运行时权限

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
得到结果

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
        Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
        //resume tasks needing this permission
    }
}
检查一下

if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
    Log.v(TAG,"Permission is granted");
    //File write logic here
    return true;
}

首先,您必须向AndroidManifest添加一些权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
另外,对于Android>6,您必须调用运行时权限

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
得到结果

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
        Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
        //resume tasks needing this permission
    }
}
检查一下

if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
    Log.v(TAG,"Permission is granted");
    //File write logic here
    return true;
}
请尝试此代码

String externalDataPath = Environment.getExternalStorageDirectory() + "/yourFolder";
File f = new File(externalDataPath);
try {
      if (!f.exists()) {
           f.mkdir();
            }
      externalDataPath = externalDataPath + "/" + filename;
      f = new File(externalDataPath);

      if (!f.exists())
           f.createNewFile();

     externalDataPath = Environment.getExternalStorageDirectory().toString();
} catch (IOException e) {
            e.printStackTrace();
        }
希望这有帮助:)

尝试一下这段代码

String externalDataPath = Environment.getExternalStorageDirectory() + "/yourFolder";
File f = new File(externalDataPath);
try {
      if (!f.exists()) {
           f.mkdir();
            }
      externalDataPath = externalDataPath + "/" + filename;
      f = new File(externalDataPath);

      if (!f.exists())
           f.createNewFile();

     externalDataPath = Environment.getExternalStorageDirectory().toString();
} catch (IOException e) {
            e.printStackTrace();
        }

希望这有帮助:)

Ayush。。Environment.getExternalStorageDirectory()api返回“/storage/emulated/0”,但我想在“/storage/6161-3165”Ayush.中创建文件夹。。Environment.getExternalStorageDirectory()api返回“/storage/emulated/0”,但我想在“/storage/6161-3165”中创建文件夹。已添加权限。Environment.getExternalStorageDirectory()api返回“/storage/emulated/0”但我想在“/storage/6161-3165”中创建文件夹我已在“设置/应用程序”列表中检查了应用程序权限。其显示为授予的存储权限。@user2318724/storage/不是外部目录。这是系统目录,您只能在根目录下创建目录或文件。我没有尝试在/storage/path下创建文件夹/文件。使用adb外壳,在存储文件夹下,我们将获得以下文件夹列表。 shell@j7xelte:/storage$ls-l drwxrwx--x root sdcard_rw 2017-02-05 07:59 6161-3165 drwx--x--x root sdcard_rw 2016-01-01 17:34仿真drwxr-xr-x系统2017-02-05 07:59 enc_仿真drwxr-xr-x root 2017-02-05 07:59自仿真和6161-3165(SD卡如下所示)位于根文件夹下,我们可以在模拟/0/文件夹下创建文件夹。@user2318724我在模拟文件夹中找不到任何关于名为6161-3165的文件夹的信息。在我的手机中,SD卡上插入了文件夹,在文件系统中显示为6161-3165。shell@j7xelte:/storage$ls-l drwxrwx--x根SD卡\u rw 2017-02-05 07:59 6161-3165-->这是外部存储器card.drwx--x--x root sdcard_rw 2016-01-01 17:34仿真drwxr-xr-x系统2017-02-05 07:59 enc_仿真drwxr-xr-x root 2017-02-05 07:59 self我希望您理解查询。已经添加了权限。Environment.getExternalStorageDirectory()api return”/storage/emulated/0但我想在“/storage/6161-3165”中创建文件夹我已检查了“设置/应用程序”列表中的应用程序权限。它显示为已授予的存储权限。@user2318724/storage/不是外部目录。它是系统目录,您只能使用根目录权限在那里创建目录或文件。我不尝试在/storage/path下创建文件夹/文件。使用adb shell,在storage folder下,我们将获得以下文件夹列表shell@j7xelte:/storage$ls-l drwxrwx--x root sdcard_rw 2017-02-05 07:59 6161-3165 drwx--x--x root sdcard_rw 2016-01-01 17:34仿真drwxr-xr-x系统2017-02-05 07:59 enc_仿真drwxr-xr-x root 2017-02-05 07:59自仿真和6161-3165(SD卡如下所示)位于根文件夹下,我们可以在模拟/0/文件夹下创建文件夹。@user2318724我在模拟文件夹中找不到任何关于名为6161-3165的文件夹的信息。在我的手机中,SD卡上插入了文件夹,在文件系统中显示为6161-3165。shell@j7xelte:/storage$ls-l drwxrwx--x根SD卡\u rw 2017-02-05 07:59 6161-3165-->这是外部存储器card.drwx--x--x root sdcard_rw 2016-01-01 17:34仿真drwxr-xr-x系统2017-02-05 07:59 enc_仿真drwxr-xr-x root 2017-02-05 07:59 self我希望你理解这个查询。面对同样的问题,你有什么解决方案吗?同样的问题……你找到了解决方案吗?面对同样的专业人士你有什么解决办法吗?同样的问题…你找到解决办法了吗?