2

该应用程序记录传感器数据并将数据写入 .txt 文件到手机 SD 卡中。

在数据采集过程中,可以随时按下停止键停止写入。

相关写作部分如下:

    myFile = new File("/sdcard/ResearchData/"
                            + txtData.getText() + ".txt");
                    myFile.createNewFile();

                    fOut = new FileOutputStream(myFile);
                    myOutWriter = new OutputStreamWriter(fOut);
                    myBufferedWriter = new BufferedWriter(myOutWriter);
                    myPrintWriter = new PrintWriter(myBufferedWriter);

myPrintWriter.write(currentTime - startTime + " " + acceleration[0]
                    + " " + acceleration[1] + " " + acceleration[2] + "\n");

一旦按下 STOP 按钮,就会执行以下代码。

myOutWriter.close();
fOut.close();

代码运行正常,但唯一的问题是,因为任何时候都可以按 STOP,所以 .txt 文件的最后一行始终是 INCOMPLETE。由于需要进行数据分析,我需要数据是一个很好的矩形矩阵。因此,我需要删除最后一个不完整的行。我该怎么做?

或者从另一个角度解决这个问题。我可以让 STOP 按钮与写入过程同步吗?即,在完全写入一行之后,检查STOP。

4

2 回答 2

1

您可以尝试设置一个布尔标志,例如isStopped表示按下了 STOP 按钮。当按下 STOP 按钮时,将isStopped标志设置为 true。在您的文件写入部分,检查isStopped标志。如果是真的,退出循环并关闭文件。否则,代码可以继续将行写入文件。

于 2013-05-29T03:11:54.123 回答
1

您需要一个bool类型的变量,它最初是false,我们称之为isStopPressed

在按钮的按下事件中,您应该将其分配给true.

我假设您在顶级函数中创建文件,并在onSensorChanged()函数中修改此文件。

然后,在这一行之后

myPrintWriter.write(currentTime - startTime + " " + acceleration[0]
                    + " " + acceleration[1] + " " + acceleration[2] + "\n");

你需要一个像这样的条件,

if(isStopPressed) {
   mSensorManager.unregisterListener([Your Sensor Listener]);
   myOutWriter.close();
   fOut.close();
}

这将为您提供最全面、最有效的间隔以满足您的需求。

于 2013-05-29T03:13:53.593 回答