7

ファイルを作成し、データをファイルに書き込み、内部ストレージに保存するメソッドを作成しました。ファイルの絶対パスまたはパスを取得すると [ファイルの操作を実験するためにログ メッセージを追加しました]、ルート ディレクトリと /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();
}

}

4

3 に答える 3

1

1) 目的がデバッグの場合は、/sdcard/. それは常に機能します。

2) 繰り返しますが、目的がデバッグである場合は、アプリのディレクトリに読み取りアクセス許可を設定してみてください。少し前に、一部の Android デバイスで動作しました (ただし、少なくとも 1 つのデバイスでは動作しませんでした)。

于 2015-05-07T06:08:48.880 に答える
0

このアクセス許可をAndroidManifest.xmlファイルに追加します。

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

次に、この最短レシピを使用します。

try
{
   FileOutputStream fos = 
      openFileOutput("myfile.txt", getApplicationContext().MODE_PRIVATE);
   fos.write("my text".getBytes());
   fos.close();
}
catch (Exception exception)
{
   // Do something, not just logging
}

「/data/data/my.package.name/files/」パスに保存されます。

于 2019-01-07T00:37:58.027 に答える