2012-01-01 3 views
0

私のAndroidアプリでは、生のディレクトリに作成した単純なテキストファイルにユーザーのデータを保存する必要があります。この後、私はGoogleの例から、簡単なコード使用してAPPEND MODEにファイルを書き込むしようとしています:エミュレータモードの「APPENDモード」でテキストファイルに書き込む

try 
{ 
    FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_APPEND); 
    fos.write((nameArticle+"|"+indexArticle).getBytes()); 
    fos.close();  
} 
catch (FileNotFoundException e) 
{    
    e.printStackTrace(); 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
} 

をしかし、何も起こりません:何の例外を、私はこれは、単一のレコード以外にも、私のFILE_NAMEに何を見ることができません私によって追加されました。

私は間違っていますか?エミュレータでファイルに書き込むことは可能ですか?

+0

あなたはどういう意味ですか?あなたが追加した単一のレポートが表示されます。他に何か要りますか?ファイルがあらかじめ存在していて、コンテンツがその既存のデータを消去することを意味しますか? –

+0

申し訳ありませんが(新年の夜間のスペルを間違えている)、私はもっと明確にする必要がありました。ファイルraw \ bookmarks.txtに1つのレコードがあり、新しい行を追加したいと思います。古い記録は保管すべきです。 –

+0

リソースファイルは実行時に編集できません。 –

答えて

2

openFileOutputは、このコンテキストのアプリケーションパッケージに関連付けられたプライベートファイルを書き込み専用に開くことができます。あなたが書き込もうとしているファイルの場所がわからない。私はフルパスを意味します。以下のコードを使用して、どこにでも置くことができます(permがある限り)。例では、外部記憶装置を使用しているが、あなたはどこにでも書くためにそれを変更することができるはずです:あなたが与えている例では

public Uri writeToExternalStoragePublic() { 
    final String  filename  = mToolbar.GetTitle() + ".html"; 
    final String  packageName  = this.getPackageName(); 
    final String  folderpath  = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/" + packageName + "/files/"; 
    File    folder   = new File(folderpath); 
    File    file   = null; 
    FileOutputStream fOut   = null; 

    try { 
     try { 
      if (folder != null) { 
       boolean exists = folder.exists(); 
       if (!exists) 
        folder.mkdirs();      
       file = new File(folder.toString(), filename); 
       if (file != null) { 
        fOut = new FileOutputStream(file, false); 
        if (fOut != null) { 
         fOut.write(mCurrentReportHtml.getBytes()); 
        } 
       } 
      } 
     } catch (IOException e) { 
      Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     } 
     return Uri.fromFile(file); 
    } finally { 
     if (fOut != null) { 
      try { 
       fOut.flush(); 
       fOut.close(); 
      } catch (IOException e) { 
       Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 
} 

、「I0Exception`をキャッチしてみてください、私はあなたが許可どこを持っていない気がしますあなたは書きたいと思っています。

ハッピーニューイヤーをお過ごしください。

+0

ええ、それは、ありがとう、たくさん働く! しかし、実際に私はあなたのコードと私の間では、存在のフォルダとファイルのチェックを除いて理解していない...私は分析する必要がありますようだ。 –

+0

内部ストレージとしてデータを保存しようとしていますか?私のファイルはサイズが小さいので、外部ストレージを使用する必要はありません。それを行うには、私はそのようなraw \ text.txtのようなフォルダパスを持っている必要がありますか? –

+0

AFAIK 'openFileOutput'は内部ストレージにファイルを作成しますが、ファイルの作成場所を指定することはできません。 'getFilesDir'または' getFileStreamPath'を使ってファイルの絶対パスを使って、ファイルが作成されるフォルダの完全なパスを得ることができます。 'raw \ text.txt'のようなファイル名のフォルダの場合、なぜあなたのコード断片がうまくいかないのか分かりません。フォルダコンポーネント 'raw'を削除してみてください。ところで、ファイルは 'data/data/com.yourpackage'に作成されていると思います。 –

関連する問題