2016-05-18 10 views
0

私は知っていますが、この質問は何千回も聞かれましたが、解決策は私のために働いていません... SDカードのファイルにデータを保存したいだけです。 しかし、最初に、ここに私のコードだ:もちろんAndroidスタジオ:外部ストレージに書き込めませんか?

private static final String TAG="Logmessage"; 

public void save(){ 
    String state=Environment.getExternalStorageState(); 
    if(Environment.MEDIA_MOUNTED.equals(state)){ 
     File dir=new File(Environment.getExternalStorageDirectory() + "/NewFolder"); 
     if(!dir.exists()){ 
      if (dir.mkdirs()){ 
       Log.i(TAG,"Dir made"); 
      }else{ 
       Log.i(TAG,"Error: Dir not made"); 
      } 
     }else{ 
      Log.i(TAG,"Dir already exists"); 
     } 
     File file=new File(dir,"file.txt"); 
     try { 
      BufferedWriter bWriter = new BufferedWriter(new FileWriter(file)); 
      bWriter.write("Hello World!"); 
      bWriter.close(); 
     }catch (IOException e){ 
      Log.e("Exception","BufferedWriter"); 
     } 
    }else{ 
     Log.i(TAG,"External Drive not available"); 
    } 
} 

私は、マニフェストファイルに<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />を追加しましたが、私はアプリを実行すると、ログメッセージは、常に、次のとおりです。Logmessage: Dir not madeException: BufferedWriter。 マニフェストファイルのエントリは、ディレクトリを作成することさえできないため、「動作しませんでした」と思いますか?

+0

Android> 5.0をターゲットに設定していますか?ストレージのアクセス許可が大幅に変更され、GoogleのAndroidデベロッパーサイトで読み上げられました。 – t0mm13b

+0

それは問題でした!私はhttp://stackoverflow.com/questions/33162152/storage-permission-error-in-marshmallowでそれを探しました。 –

答えて

0

このコードは、私にとっては完璧な作業:

String state = Environment.getExternalStorageState(); 
File mFileTemp; 
if (Environment.MEDIA_MOUNTED.equals(state)) { 
//this is like that 
//any folder name/you can add inner folders like that/your photo name122412414124.jpg 
mFileTemp = new File(Environment.getExternalStorageDirectory()+File.separator+"any folder name"+File.separator+"you can add inner folders like that" 
     , "your photo name"+System.currentTimeMillis()+".jpg"); 
mFileTemp.getParentFile().mkdirs(); 
//then write file 
} 
else { 
mFileTemp = new File(getFilesDir()+"any folder name"+ 
     File.separator+"myphotos")+File.separator+"profilephotos", "your photo name"+System.currentTimeMillis()+".jpg"); 
mFileTemp.getParentFile().mkdirs(); 
//then write file 
} 

あなたが代わりに「/」

File.separatorを使用することができますし、外部には利用できない場合、このコードは、デフォルト

することにより、内部ストレージに同じフォルダを作成します。
関連する問題