文件数据存储

时间:2013-10-02 09:34:53

标签: android

我做了一个应用程序来收集光传感器数据,这样这些数据就存储在外部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;
    }



}

任何人都可以帮助我吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

替换

fw  = new FileWriter(file_1, true);

fw  = new FileWriter(file_1, false);