0

Android用の小さなアプリを書いています。ファイルを作成しようとしています。コード スニペットを次に示します。

final String TESTSTRING = new String("Hello Android");                 
FileOutputStream fOut = openFileOutput("samplefile.txt",Context.MODE_WORLD_READABLE);
OutputStreamWriter osw = new OutputStreamWriter(fOut); 
osw.write(TESTSTRING);
osw.flush();
osw.close();

FileInputStream fIn = openFileInput("samplefile.txt");
InputStreamReader isr = new InputStreamReader(fIn);
char[] inputBuffer = new char[TESTSTRING.length()];

isr.read(inputBuffer);

String readString = new String(inputBuffer);

boolean isTheSame = TESTSTRING.equals(readString);

if(isTheSame) {
    TextView mLat=(TextView) findViewById(R.id.textView1);
    mLat.setText(String.valueOf(isTheSame));     
}   

ファイルマネージャーを使用して、この作成された samplefile.txt を見つけることができません。アプリが書いているパスを誰か教えてもらえますか?

さて、私はこれを持っています:

String pathToExternalStorage = Environment.getExternalStorageDirectory().toString();
     File appDirectory = new File(pathToExternalStorage + "/" + "testowa", "new_file.txt");
     try{
         OutputStream os = new FileOutputStream(appDirectory);
         os.write(pathToExternalStorage.getBytes());
         os.flush();
         os.close();
     }
     catch(IOException e)
     {

     }

OutputStream でスローされる例外 os = new FileOutputStream(appDirectory); 理由がわかりません。パーミッションでマニフェストを変更しました

4

3 に答える 3

1

このファイルは /data/data/com.yourpackagename/files/filename.txt にあり、デバイスがルート化されていない限り非表示になっています。ファイルが作成されたディレクトリからコピーすることで、ファイルにアクセスできます。

コマンドラインから:

ファイルをコピーするには

    adb -d shell 
    run-as com.yourpackagename 
    cat /data/data/com.yourpackagename/files/filename.txt > /sdcard/filename.txt

または、SQLite データベースの場合

    cat /data/data/com.yourpackagename/databases/dbname.db > /sdcard/dbname.sqlite 

このソリューションは、デバイスをルート化する必要なく機能します。

于 2014-06-24T21:18:51.057 に答える
0

openFileOutput(name)を使用して作成されたファイルのパスを取得できますgetFileStreamPath(name)。ただし、ファイル マネージャー アプリでこのパスを表示するには、ルート権限が必要です。

于 2012-12-25T13:42:03.127 に答える
0

で作成してい/data/data/your.package.name/filesます。ただし、このディレクトリはファイル管理者には表示されません (root 権限がない場合)。

于 2012-12-25T13:42:28.980 に答える