2016-04-25 15 views
2

加速度計からのデータを読み込み、後で処理できるように.txtファイルに保存するアプリケーションを開発しています。androidにある既存の.txtファイルにデータを追加する方法

これまでのところ、私は読書を読むことができましたし、読んだほうが1つしか読めない、私はいつも以前のファイルを上書きする新しいファイルを作成することを理解しています。しかし私は、私が停止ボタンを押すまで、私が開始ボタンを押す瞬間からすべての測定をすることが欲しいです。ここで

は、私が使用しているコードです:

public class MainActivity extends AppCompatActivity implements SensorEventListener, View.OnClickListener { 

private SensorManager mSensorManager; 

private Sensor mAccelerometer; 
private Button bStart, bStop; 
float[] acceleration = new float[3]; 
private String mString; 

MyFile file = new MyFile(this); 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    bStart = (Button)findViewById(R.id.start); 
    bStop = (Button)findViewById(R.id.stop); 

    mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE); 
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

    bStart.setOnClickListener(this); 
    bStop.setOnClickListener(this); 
    bStart.setEnabled(true); 
    bStop.setEnabled(false); 
} 

@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) {} 

public final void onSensorChanged(SensorEvent event){ 
    if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){ 
     acceleration[0] = event.values[0]; 
     acceleration[1] = event.values[1]; 
     acceleration[2] = event.values[2]; 
     TextView mTextview1 = (TextView) findViewById(R.id.textView1); 
     TextView mTextview2 = (TextView) findViewById(R.id.textView2); 
     TextView mTextview3 = (TextView) findViewById(R.id.textView3); 
     mTextview1.setText("X:"+String.valueOf(acceleration[0])); 
     mTextview2.setText("Y:"+String.valueOf(acceleration[1])); 
     mTextview3.setText("Z:"+String.valueOf(acceleration[2])); 

     file.writeToSD(acceleration[0] + "," +acceleration[1] + "," +acceleration[2] + "\n"); 
    } 
} 

@Override 
public void onClick(View v) { 
    switch(v.getId()){ 
     case R.id.start: 
      bStart.setEnabled(false); 
      bStop.setEnabled(true); 
      mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
      break; 
     case R.id.stop: 
      bStart.setEnabled(true); 
      bStop.setEnabled(false); 
      mSensorManager.unregisterListener(this); 
      break; 
    } 
} 

}

、ジョブが実行されますMyFileのクラスは、以下の通りです:

public class MyFile { 

String TAG = "MyFile"; 
Context context; 

public MyFile(Context context) { 
    this.context = context; 
} 

public Boolean writeToSD(String text) { 
    Boolean write_successful = false; 
    File root = null; 
    try { 
     // check for SDcard 
     root = Environment.getExternalStorageDirectory(); 
     Log.i(TAG, "path.." + root.getAbsolutePath()); 

     //check sdcard permission 
     if (root.canWrite()) { 
      File fileDir = new File(root.getAbsolutePath()); 
      fileDir.mkdirs(); 

      File file = new File(fileDir, "samplefile.txt"); 
      FileWriter filewriter = new FileWriter(file); 
      BufferedWriter out = new BufferedWriter(filewriter); 
      out.append(text); 
      out.flush(); 
      out.close(); 
      write_successful = true; 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
     write_successful = false; 
    } 
    return write_successful; 
} 

}

私が持っているもう一つの質問は、なぜ私はsdcardに.txtファイルを保存することができないと、それは内部のメモry。

ありがとうございました

+3

2番目のパラメータをtrueにすると、ファイルに追加されます。このFileWriterのようにfw = new FileWriter( "outfilename"、true); – androidnoobdev

+0

ありがとうございます。出来た。ちなみに、このコードを使用する理由は、.txtファイルがデバイスの内部メモリに保存され、sdcardに保存されない理由は何ですか?エミュレータまたはデバイスでテスト中のパーミッションを使用していますか?使用許諾:android.permission.WRITE_EXTERNAL_STORAGE "/> – user2149122

+0

ロガーで印刷するパスを確認することができます。あなたはすでにそのパスを印刷しています。それをチェックしてください。 – androidnoobdev

答えて

1

このコードをお試しください。 FileWriterの2番目の引数を,に設定します。したがって、既存のファイルを追加することができます。

File file = new File("Hello.txt");  
file.createNewFile();  
FileWriter writer = new FileWriter(file,true); 
writer.write("Writes the content to the file"); 
writer.flush(); 
writer.close();