2016-05-29 17 views
0

SDカードにファイルを作成する方法を探しています。現在、私はこのコードを持っている:私の活動でAndroid:SDカードに作成されたファイルがありません

public class Store { 

private final String fileName = "histoires.json"; 

public void createFile(Context context, String json) { 
    File file = new File (getDir(context), fileName); 
    try { 
     FileOutputStream out = new FileOutputStream(file); 
     out.write(json.getBytes()); 
     out.flush(); 
     out.close(); 

    } catch (Exception e) { 
     Log.e("Erreur enregistrement du fichier", e.toString()); 
    } 
} 

private File getDir(Context context) { 
    File dir; 
    if(!isExternalStorageReadable() || !isExternalStorageWritable()) { 
     dir = context.getFilesDir(); 
    } 
    else { 
     dir = context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS); 
    } 
    return dir; 
} 

/* Checks if external storage is available for read and write */ 
public boolean isExternalStorageWritable() { 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     return true; 
    } 
    return false; 
} 

/* Checks if external storage is available to at least read */ 
public boolean isExternalStorageReadable() { 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state) || 
      Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
     return true; 
    } 
    return false; 
}} 

私はちょうどこれを呼び出す:

new Store().createFile(this, json); 

問題がある:私は私のファイルを参照してくださいが、常に携帯電話のメモリに。私はgetExternalFilesDir()を使用しました。とにかく、私のファイルをSDカードに保存したくありません。 私はreturn文でGETDIR()の私のdir変数の内容をチェックし、それは次のようになります。 /storage/emulated/0/Android/data/com.histoire_horreur/files/Documents

あなたは私を助けてくださいことはできますか?

+0

をメモリ/ SDカードの場合は、[this](http://stackoverflow.com/q/22219312/2952723) – Harshiv

+0

を確認する必要があります。私はSystem.getenv( "SECONDARY_STORAGE")を使用すると、この結果が出ます:/ storage/sdcard1。それは良いようだが、最初にそれはAndroid/data/com.histoire_horreur/files/Documentsへのすべてのパスを表示せず、2番目のSDカードに何も保存されません...おそらくsdcard1は間違っている? – Cainzer

+0

Androidは外部SDカード/メモリカードにアクセスするための標準的な方法を実装していません。デバイスメーカーによって実装されているため、外部SDカードへのパスと方法はデバイスによって異なります。いくつかの場所では '/ storage/sdcard1'(例えば、Sony Experiaのデバイスの中にいくつかあります)とか、/ storage/extsdcardやその他のものかもしれません。また、アンドロイドAPIレベルによって異なります。だからあなたは別にそれを把握する必要があります。メモリカードディレクトリに書き込もうとしていますか? 'Android/data/data/your.package/files /'? – Harshiv

答えて

0

使用してみてください:あなたはexternalStorage -e.g.への書き込みをしようとしている場合

String mfileName; 
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath(); 
+0

右のフォルダに行くのではなく、/storage/emulated/0/histoires.jsonに入ります。そしてそれはいつも電話の記憶にあります – Cainzer

関連する問題