2017-02-22 6 views
0

Я пытаюсь создать папки и файлы во внешнем хранилище через приложение.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() возвращает ложь и папка не создается. В то же время я могу видеть 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

ответ

0

Прежде всего, вы должны добавить некоторое разрешение на ваш AndroidManifest

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

Чтобы создать папку во внешнем хранилище е называют что-то вроде этого

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 return "/ storage/emulated/0" Но я хочу создать папку в папке «/ storage/6161-3165» Я проверил разрешения приложений в настройках/списке приложений. Он показан как предоставленные разрешения на хранение. – user2318724

+0

@ пользователь2318724/хранение/не внешний реж. Это системный каталог, вы можете создавать dirs или файлы там только с корневым разрешением –

+0

Я не пытаюсь создать папку/файл под/storage/path. С оболочкой adb, в папке с хранилищем, мы получим следующий список папок. \t оболочки @ j7xelte:/хранения $ Ls -l \t drwxrwx - х корень sdcard_rw 2017-02-05 07:59 6161-3165 \t drwx - х - х корень sdcard_rw 2016-01-01 17: 34 эмулировать \t drwxr-хт-й система 2017-02-05 7:59 enc_emulated \t drwxr-хт-х корень корень 2017-02-05 7:59 собственные Как эмулировать и 6161-3165 (SD-карте отображаются так: находятся в корневой папке. С файлом.mkdir() мы можем создать папку под эмулированной/0/папкой. – user2318724

0

Попробуйте этот код ....

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

Смежные вопросы