我沒有一個應用程序來收集光的傳感器數據,以使得這些數據被存儲在文本文件中的外部的SD卡,該數據被正確地存儲和文件創建成功,但是,從運行的應用程序然後當問題是我的對於x段(例如1分鐘)裝置中的數據被存儲,但是當接近該應用程序,並重新對從同一期間也是新收集的數據被追加存儲到從前面的運行和我先前的存儲數據的設備運行它注意到當文本文件的大小隨着每次運行而增加時。
我需要爲每個運行時,所收集的數據被完全存儲(爲的即運行1分鐘的整個週期)在文本文件中,當我再次重新運行應用程序的新的運行的新收集的數據將被重寫在先前存儲的數據上。文件數據存儲
我試圖做到這一點,使用arraylist,即當應用程序開始運行時,我把所有收集的閱讀數組列表中,當運行停止時,arraylist會將所有收集的數據輸出到文本文件,運行應用程序中的數組列表還收集數據,並追加了到文本文件中下一個先前運行存儲的數據,其中,這是需要解決的問題,我需要覆蓋新的運行聚集在前面的運行存儲數據。
收集光傳感器數據的代碼如下所示:
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType()==Sensor.TYPE_LIGHT){
max = msensorManager.getDefaultSensor(Sensor.TYPE_LIGHT).getMaximumRange();
//getMaximumRange() is the maximum range of the sensor in the sensor's unit.
//tv1.setText("Max Reading: " + String.valueOf(max));
tv1.setText(msg +"Max Reading: " + String.valueOf(max));
tv1.invalidate();
lightMeter.setMax((int)max);
//setMax is the max of the upper range of this progress bar
currentReading = event.values[0];
//timestamp = event.timestamp;
lightMeter.setProgress((int)currentReading);
Toast.makeText(MainActivity.this,"Event Happend '", Toast.LENGTH_SHORT).show();
tv2.setText("Current Reading: " + String.valueOf(currentReading));
current_reading_list.add((double) currentReading);
}
從數組列表寫入文件的代碼看起來像:
public void writing_in_file_1(){
try{
fw = new FileWriter(file_1, true);
bw = new BufferedWriter(fw);
out = new PrintWriter(bw);
//out.append(String.valueOf(currentReading + " \t"));
//out.append(String.valueOf(current_reading_list));
out.print(String.valueOf(current_reading_list));
out.flush();
Toast.makeText(this,"Done writing SD 'specific text file'", Toast.LENGTH_SHORT).show();
}
catch (IOException e)
{
e.printStackTrace();
}
finally{
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在書寫時按下停止按鈕時:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt1:
counter_function();
//onResume();
break;
case R.id.bt2:
onPause();
writing_in_file_1();
tv1.setText("");
tv2.setText("");
break;
default:
break;
}
}
任何人都可以幫我嗎?
預先感謝您。
我以前嘗試過,但也還是追加寫入 –