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

问题描述:

我试图通过应用程序在外部存储目录中创建文件夹和文件。Android:如何在外部(可移动)SD卡中创建文件夹和文件?

File f = new File("/storage/emulated/0", mFileName); 
    boolean isCreated = f.mkdir(); 

这始终是成功的,isCreated是真的有任何异常或警告,并创建文件夹。

Environment.getExternalStorageDirectory()也会返回“/ storage/emulated/0”。

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

File f = new File("/storage/6161-3165", mFileName); 
    boolean isCreated = f.mkdir(); 

始终f.mkdir()返回false,而不是创建的文件夹。 同时,我可以看到W/System.err的:......在logcat中如下:

**02-22 14:50:47.551 13536-13536/com.testapp.extsd W/System.err: mkdir failed: EACCES (Permission denied) : /storage/6161-3165/uyyyy** 

我已经在清单文件中提到WRITE_EXTERNAL_STORAGE权限。仍然没有创建文件夹。

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

存储在我的手机的文件结构是:

[email protected]:/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 

壳@ j7xelte:/存储$

等待响应...

+0

面临着同样的问题,你有什么办法解决? – Parth

你所添加的第一一些允许您AndroidManifest

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

要在外部存储媒体文件夹E,称这样的事情

String folder_main = "NewFolder"; 

File f = new File(Environment.getExternalStorageDirectory(), folder_main); 
if (!f.exists()) { 
    f.mkdirs(); 
} 

此外,针对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; 
} 
+0

已添加权限。 Environment.getExternalStorageDirectory()API返回“/存储/模拟/ 0” 但我想在设置/应用程序列表“/存储/ 6161-3165” 我已经检查应用程序的权限来创建文件夹。它显示为授予的存储权限。 – user2318724

+0

@ user2318724/storage /不是外部目录。这是系统目录,你只能用root permision –

+0

我不是想创造条件/存储/路径文件夹/文件中有创建显示目录或文件。 使用adb shell,在存储文件夹下,我们会得到以下文件夹列表。 \t壳@ j7xelte:/存储$ LS -l \t drwxrwx - X根sdcard_rw 2017年2月5日7时59分6161-3165 \t drwx - X - X根sdcard_rw 2016年1月1日17: 34仿真 \t drwxr-XR-X系统的系统2017年2月5日7时59分enc_emulated \t drwxr-XR-X根根2017年2月5日7时59分自 两个模拟和6161-3165(SD卡是像这样显示)位于根文件夹下。 使用file.mkdir(),我们可以在仿真的/ 0 /文件夹下创建文件夹。 – user2318724

试试这个代码....

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(); 
     } 

希望这有助于:)

+0

Ayush .. Environment.getExternalStorageDirectory()api return“/ storage/emulated/0” 但我想创建文件夹“/ storage/6161-3165" – user2318724