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

Android-删除.txt文件中最后一行不完整的内容,android,Android,该应用程序记录传感器数据,并将数据写入.txt文件到手机SD卡中 在数据采集过程中,可以随时按下停止按钮停止写入 相关写作部分如下: myFile = new File("/sdcard/ResearchData/" + txtData.getText() + ".txt"); myFile.createNewFile(); fOut = new Fi

该应用程序记录传感器数据,并将数据写入.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");
按下停止按钮后,将执行以下代码

myOutWriter.close();
fOut.close();
代码运行正常,但唯一的问题是,因为随时可能按STOP,所以.txt文件的最后一行总是不完整的。由于数据分析的需要,我需要的数据是一个很好的矩形矩阵。因此,我需要删除最后一行不完整的内容。我可以怎么做?


或者从另一个角度来解决这个问题。我可以使停止按钮与写入过程同步吗?i、 例如,在一行完全写入后,检查停止。

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

您需要一个
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();
}

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

是的,您的假设在我的情况下都是有效的。所以您的想法是:一旦按下停止按钮,就关闭所有传感器,这样就不会调用onSensorChanged()方法了?这是否可以确保最后一行数据已完全写入?是,因为您在写入最后一行后取消注册传感器侦听器并关闭文件。否。不工作。你所说的正是我所做的。没错,它应该可以工作,但不知何故,编写过程仍然会被中断。您能否尝试添加
myOutWriter.flush()
before
myOutWriter.close()并查看是否有帮助?