0

我做了一个应用程序来收集光传感器数据,以便将这些数据存储在外部 sdcard 的文本文件中,正确存储数据并成功创建文件,但问题是当应用程序在我的设备上运行 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;
    }



}

谁能帮我?

先感谢您。

4

1 回答 1

0

您正在使用带有 append = true的构造函数FileWriter(File file, boolean append)

代替

fw  = new FileWriter(file_1, true);

fw  = new FileWriter(file_1, false);
于 2013-10-02T09:39:45.810 回答