2017-02-22 295 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()返回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

回答

0

你所添加的第一一些允許您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

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

相關問題