2016-06-28 272 views
-1

我正在尝试为显示磁力计传感器值并将这些数据保存在文件中的应用程序编写代码。 我写了下面的代码,但问题出在我的文件中,我发现只有一行包含最后的值。如何使用android studio写入文件中的数据

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(); 

能不能请你帮忙看看有什么错我的代码。

回答

1

你应该追加模式打开FileOutputStream,通过传递一个布尔true作为第二个参数

FileOutputStream f = new FileOutputStream(openfilename, true); 

this更多细节

1

如记录here你应该使用此构造函数来打开文件在追加模式:

FileOutputStream fStream = new FileOutputStream(fileName, true); 

由于您在创建FileOutputStream对象时没有使用append标志,因此每次打开并写入时都会覆盖文件中的以前的数据。

1

其他答案没有问题,但代码的问题源于某些逻辑错误和遗漏。

看来你有些事情在概念上是错误的。你在什么时候将文本写入文件?您似乎正在创建一个循环,并且在该循环内,您会在每次将数据写入文件的迭代中创建一个文本文件。

这将始终导致您描述的问题。

退一步,想想这里的逻辑,然后将文件写入代码放入一个单独的函数中。只有当你想要保存数据时才调用该函数(例如,离开文本视图时,点击活动上的按钮或其他有用的时间)。

只有在完成收集数据之后但在活动关闭之前,才会调用写入过程。正如你所写,你的逻辑甚至可能会创建多个文件,并且始终只向该文件写入一行代码。鉴于您的具体任务,您可能想尝试使用StringBuffer并将其内容输出到文件。搜索SO和谷歌会给你很多例子。

目前还不清楚为什么您要在textview中显示数据,因此您可能希望独立于textview捕获数据并仅在必要时显示所需数据。

+0

事实上,我想每500ms保存一次磁力仪的值,这就是为什么我有循环 – dou

相关问题