Android - 删除.txt文件中最后一个不完整的行

时间:2013-05-29 02:53:45

标签: android

应用程序记录传感器数据并将数据写入.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。

2 个答案:

答案 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();
}

这将为您提供最全面,最有效的时间间隔。