应用程序记录传感器数据并将数据写入.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。
答案 0 :(得分:1)
您可以尝试设置布尔标志,例如isStopped
以指示按下STOP按钮。
按下STOP按钮时,将isStopped
标志设置为true。
在文件编写部分中,检查isStopped
标志。如果是,则退出循环并关闭文件。否则,代码可以继续将行写入文件。
答案 1 :(得分:1)
您需要bool
类型的变量,该变量最初为false
,我们称之为isStopPressed
。
在按钮的向下事件中,您应将其指定给true
。
我假设您在top函数中创建文件,并在onSensorChanged()
函数内修改此文件。
然后,在此行之后
myPrintWriter.write(currentTime - startTime + " " + acceleration[0]
+ " " + acceleration[1] + " " + acceleration[2] + "\n");
你需要一个有条件的,
if(isStopPressed) {
mSensorManager.unregisterListener([Your Sensor Listener]);
myOutWriter.close();
fOut.close();
}
这将为您提供最全面,最有效的时间间隔。