如何使用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保存一次磁光仪的值,这就是我有循环的原因