如何使用android studio在文件中写入数据
我正在尝试为一个应用程序编写代码,该应用程序显示磁强计传感器的值,并将这些数据保存在一个文件中。 我编写了以下代码,但问题是在我的文件中,我发现只有一行包含最后的值如何使用android studio在文件中写入数据,android,Android,我正在尝试为一个应用程序编写代码,该应用程序显示磁强计传感器的值,并将这些数据保存在一个文件中。 我编写了以下代码,但问题是在我的文件中,我发现只有一行包含最后的值 FloatingActionButton fab; fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener( new View.OnClickListener(){ @Overri
FloatingActionButton fab;
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener( new View.OnClickListener(){
@Override
public void onClick(View view){
final Thread t = new Thread() {
File openfilename= new File(Environment.getExternalStorageDirectory(),"myfile.txt");
FileOutputStream f;
@Override
public void run() {
try {
while (!isInterrupted()) {
Thread.sleep(500);
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView tv;
tv=(TextView)findViewById(R.id.tv);
tv.setText(" x="+Float.toString(xx)+" y="+Float.toString(yy)+" z="+Float.toString((zz))+" Puissance="+Float.toString(magneticStrenght));
try {
FileOutputStream f =new FileOutputStream(openfilename);
PrintWriter pw=new PrintWriter(f);
pw.append("\n x="+Float.toString(xx)+" y="+Float.toString(yy)+" z="+Float.toString((zz))+" Puissance="+Float.toString(magneticStrenght));
//close the file
pw.flush();
pw.close();
f.close();
} catch (java.io.IOException e) {
//do something if an IOException occurs.
Log.e("Exception", "File write failed: " + e.toString());
}
}
});
}
} catch (InterruptedException e) {
}
}
};
t.start();
你能帮我看看我的代码有什么问题吗 您应该在追加模式下打开
FileOutputStream
,将布尔值true
作为第二个参数传递
FileOutputStream f = new FileOutputStream(openfilename, true);
有关更多详细信息,请参见所记录的,您应该使用此构造函数以附加模式打开文件:
FileOutputStream fStream = new FileOutputStream(fileName, true);
由于在创建FileOutputStream对象时没有使用append标志,因此每次打开和写入文件时都会覆盖文件中以前的数据。其他答案没有问题,但代码的问题源于某些逻辑错误和遗漏 看起来你在概念上有一些错误。您在什么时候尝试将文本写入文件?您似乎正在创建一个循环,在该循环中,您在每次迭代中创建一个文本文件,其中数据被写入该文件 这将始终导致您描述的问题 退一步,考虑一下这里的逻辑,然后将文件编写代码放在一个单独的函数中。仅当您希望保存数据时(例如,在离开textview、点击活动按钮或其他有用的时间)调用该函数 只有在完成数据收集后,在活动离开屏幕之前,才能调用写入过程。在编写时,您的逻辑甚至可能创建多个文件,并且始终只向该文件写入一行代码。给定您的特定任务,您可能希望尝试使用StringBuffer并将其内容输出到文件。搜索SO和Google会给你很多例子
不清楚为什么要在textview中显示数据,因此您可能希望独立于textview捕获该数据,并仅在必要时显示所需内容。事实上,我希望每隔500ms保存一次磁光仪的值,这就是我有循环的原因