web-dev-qa-db-ja.com

Android:ファイルを内部ストレージに書き込む方法

単純なAndroidアプリケーションを開発していますが、内部ストレージデバイスにテキストファイルを書き込む必要があります。私はこの問題について多くの質問(および回答)があることを知っていますが、私が実際に間違ったやり方で何をしているかを理解することはできません。

これは、ファイルを作成するためにアクティビティで使用するコードです。

public void writeAFile(){
    String fileName = "myFile.txt";
    String textToWrite = "This is some text!";
    FileOutputStream outputStream;

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

どちらの間違いをしているのか本当に理解できません。さらに、私はどこで間違っているのかを理解するために、Android St​​udioと私の電話でエミュレータで this プロジェクトを試しましたが、そのプロジェクトでもファイルは書き込まれません電話またはエミュレーターで。

編集:私は、ファイルに書き込んだ後、次のコードでファイルの内容を読み取ろうとするため、内部ストレージにファイルが書き込まれないことを知っています:

public void ReadBtn(View v) {
    //reading text from file
    try {
        FileInputStream fileIn=openFileInput("myFile.txt");
        InputStreamReader InputRead= new InputStreamReader(fileIn);

        char[] inputBuffer= new char[READ_BLOCK_SIZE];
        String s="";
        int charRead;

        while ((charRead=InputRead.read(inputBuffer))>0) {
            String readstring=String.copyValueOf(inputBuffer,0,charRead);
            s +=readstring;
        }
        InputRead.close();
        textmsg.setText(s);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

何も表示されません。

13
delca85

以下のコードを使用して、ファイルを内部ストレージに書き込みます

編集:e.printStackTrace();を追加して、ブロックを適切な方法としてキャッチし、アクセス許可を思い出させます

public void writeFileOnInternalStorage(Context mcoContext,String sFileName, String sBody){      
    File file = new File(mcoContext.getFilesDir(),"mydir");
    if(!file.exists()){
        file.mkdir();
    }

    try{
        File gpxfile = new File(file, sFileName);
        FileWriter writer = new FileWriter(gpxfile);
        writer.append(sBody);
        writer.flush();
        writer.close();

    }catch (Exception e){
        e.printStackTrace();

    }
}

マニフェストに外部ストレージの書き込みおよび読み取り権限を追加することを忘れないでください:

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
17
Sandeep dhiman

電話機にもエミュレータにもファイルは書き込まれません。

はいあります。 Android SDKが 内部ストレージ と呼ぶものに書き込まれます。これは、notユーザーとしての「内部ストレージ「ユーザーとしてのあなたは、デバイスの内部ストレージにあるものを見ることができません(ルート化されていない限り)。

ユーザーが表示できる場所にファイルを書き込みたい場合は、 外部ストレージ を使用します。

このような基本的なAndroid開発トピックは、Androidアプリ開発に関するまともな本で説明されています。

9
CommonsWare

内部ストレージに保存

        data="my Info to save";
        try {
           FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE);
           fOut.write(data.getBytes());
           fOut.close();
           Toast.makeText(getBaseContext(),"file saved",Toast.LENGTH_SHORT).show();
        }
        catch (Exception e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
        }

内部ストレージから読み取る

      try {
           FileInputStream fin = openFileInput(file);
           int c;
           String temp="";
           while( (c = fin.read()) != -1){
              temp = temp + Character.toString((char)c);
           }
           tv.setText(temp);
           Toast.makeText(getBaseContext(),"file read",Toast.LENGTH_SHORT).show();
        }
        catch(Exception e){
        }

外部ストレージへの書き込み許可をリクエストしましたか?

https://developer.Android.com/training/basics/data-storage/files.html#GetWritePermission

おそらく、try\catchブロックが例外を飲み込んでおり、それが問題の内容を伝えている可能性があります。

また、保存先のパスを設定していないようです。

例: AndroidのEnvironment.getExternalStorageDirectory()の使用方法

0
Kuffs