2016-12-28 7 views
0

Android用のアプリを作成しようとしていて、サーバーからのresposneを保存する必要があります。このパスのtxtファイルに保存してください:Androidでファイルを保存するための正しいパス

String path= "/storage/emulated/0/Android/data/com.example.simone.pizzino/files/response.txt"; final File file = new File(path);

私の友人の電話でテストすると、そのパスのフォルダは表示されません。そのパスはdata/data/"packageName"のようなもので、Android Studioのエミュレータでも動作しません。 私の電話は、7.1のストック・ロムを実行しているNexus 5Xです。 私の友人は6.1を使っています。 定数として記述することなく、アプリケーションフォルダへの動的パスを取得する方法はありますか?

申し訳ありませんが、この質問はすでに尋ねられましたが、私の問題の解決策を見つけることができません。

+0

私はあなたが「アプリケーションフォルダ」と考えるものは不明です。あなたのハードコードされたパスは 'Context'(例えば' Activity'や 'Service')で呼び出された' getExtenalFilesDir(null) 'の出力に最もよく似ています。それを超えて、**詳細に**を説明してください** "それはうまくいかない"ということを意味します。 – CommonsWare

+0

ハードコーディングされたパスを使用する理由がわかりません。内部ストレージにファイルを保存するだけですhttps://developer.android.com/training/basics/data-storage/files.html – petrumo

+0

彼のアプリケーションのディレクトリは私のものと異なります、彼はdata/data /パッケージ名。アプリケーションはファイルを見つけることができないので、その場所にファイルを保存することはできません。 – Facosenpai

答えて

3

まず最初のOUは、マニフェストファイル

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

保存

外部ストレージの内部ストレージ

File file = new File(context.getFilesDir(), filename); 
String filename = "myfile"; 
String string = "Hello world!"; 
FileOutputStream outputStream; 

try { 
outputStream = openFileOutput(filename, Context.MODE_PRIVATE); 
outputStream.write(string.getBytes()); 
outputStream.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

public File getTempFile(Context context, String url) { 
    File file; 
try { 
    String fileName = Uri.parse(url).getLastPathSegment(); 
    file = File.createTempFile(fileName, null, context.getCacheDir()); 
} catch (IOException e) { 
    // Error while creating file 
} 
return file; 
} 

保存上のファイルファイルで外部ストレージにアクセスするための権限を追加するだけです

/* 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; 
} 

public File getAlbumStorageDir(String albumName) { 
// Get the directory for the user's public pictures directory. 
File file = new File(Environment.getExternalStoragePublicDirectory(
     Environment.DIRECTORY_PICTURES), albumName); 
if (!file.mkdirs()) { 
    Log.e(LOG_TAG, "Directory not created"); 
} 
return file; 
} 
+0

Android 6新しいアクセス許可モデルが変更されました。 –

関連する問題