2017-02-22 18 views
0

私はアプリケーションを通じて外部ストレージディレクトリにフォルダとファイルを作成しようとしています。Android:外付け(リムーバブル)SDカードにフォルダやファイルを作成する方法は?

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

これは常に成功し、例外や警告が出されてフォルダが作成されてもisCreatedはtrueになります。

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、アンドロイド> 6のためにあなたが

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

を招き、チェックしますランタイム許可に

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

を呼び出す必要があり、また、この

String folder_main = "NewFolder"; 

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

のようなものを呼び出すこと

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は "/ storage/emulated/0"を返す "/ storage/6161-3165"にフォルダを作成したい 設定/アプリケーションリストでアプリの権限をチェックしました。これは、ストレージ権限が付与されていることを示します。 – user2318724

+0

@ user2318724/storage /は外部ディレクトリではありません。それはシステムディレクトリです。ルートパーミッションでしかディレクトリやファイルを作成することはできません。 –

+0

/storage/pathにフォルダ/ファイルを作成しようとしていません。 adbシェルでは、ストレージフォルダの下に、次のフォルダリストが表示されます。 \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分の両方エミュレートし、6161から3165(SDカードである2017年2月5日午前7時59分自己 を\t drwxr-XR-Xルートルートをenc_emulatedこのように表示されます)はルートフォルダの下にあります。 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

関連する問題