ファイルを作成し、データをファイルに書き込み、内部ストレージに保存するメソッドを作成しました。ファイルの絶対パスまたはパスを取得すると [ファイルの操作を実験するためにログ メッセージを追加しました]、ルート ディレクトリと /data/data/mypackagename の下にファイルが作成されていることがわかります。 /ファイル/ファイル名.txt. それにもかかわらず、私が書いた方法で作成されたファイルを見つけることができる DDMS でこれらのフォルダーを見つけることができました。しかし、権限がないため、そのファイルも開くことができません。
Android デバイスを見ると、これらのディレクトリが見つかりません。スタック オーバーフローを調べたところ、内部ストレージの /data/data フォルダーが非表示になっており、アクセスするにはデバイスをルート化する必要があるとの回答がありましたが、これは望ましくありません。
次のアプローチ: Android デバイスには MyFiles というフォルダーがあります [テスト用に Android 4.4 を実行している Galaxy Tab 4 を使用しています]。このフォルダの下には、Documents、Pictures、Music、Ringtones、Android などのさまざまなフォルダがある Device Storage ディレクトリがあります。そのため、カメラ、スプレッドシート アプリなどのアプリは、写真フォルダに写真を書き込んだり保存したりできます。またはドキュメント フォルダー内の txt ファイル。同様に、関数で作成しているファイルを Documents フォルダーまたはデバイス経由でアクセスできる他のフォルダーに書き込むにはどうすればよいですか。どうすればそれができるか教えてください。どんな助けでも大歓迎です。
以下は私が書いたコードです:
public void addLog(String power_level){
// creates a logFile in the root directory of the internal storage of the application.
// If the file does not exists, then it is created.
Log.d("AppendPower", "In addLog method");
//File logFile = new File(((Context)this).getFilesDir(), "logFile.txt");
File logFile = new File(getFilesDir(), "logFile.txt");
Log.d("FilesDir Path", getFilesDir().getAbsolutePath());
Log.d("FilesDir Name", getFilesDir().getName());
Log.d("Path on Android", logFile.getPath());
Log.d("Absolute Path on Android", logFile.getAbsolutePath());
Log.d("Parent", logFile.getParent());
if(!logFile.exists()){
try{
logFile.createNewFile();
}catch(IOException io){
io.printStackTrace();
}
}
try{
BufferedWriter writer = new BufferedWriter(new FileWriter(logFile, true));
writer.write("Battery level reading");
writer.append(power_level);
Log.d("Power_Level in try", power_level);
writer.newLine();
writer.close();
}catch(IOException e){
e.printStackTrace();
}
}