有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android在文件中写入最后一个值

因此,我正在开发安卓应用程序,将传感器值存储在一个文件中。我的主要问题是,应用程序只是在文件中写入最后一个值。基本上,我正在尝试编写代码,将每个传感器值存储到文件中。我正在写Android应用程序。。。有人能帮忙吗?代码如下:

package com.example.hello;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

import 安卓.app.Activity;
import 安卓.content.Context;
import 安卓.hardware.Sensor;
import 安卓.hardware.SensorEvent;
import 安卓.hardware.SensorEventListener;
import 安卓.hardware.SensorManager;
import 安卓.os.Bundle;
import 安卓.os.Environment;
import 安卓.view.Menu;
import 安卓.widget.TextView;

public class MainActivity extends Activity {

private TextView xAxis, yAxis, zAxis;
private SensorManager sm;
private Sensor mSensor;
final File file = new File(Environment.getExternalStorageDirectory(),
        "results.txt");
static FileOutputStream fos;
static OutputStreamWriter myOutWriter;
private String writeString;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    xAxis = (TextView) findViewById(R.id.xAxis);
    yAxis = (TextView) findViewById(R.id.yAxis);
    zAxis = (TextView) findViewById(R.id.zAxis);

    sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mSensor = sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
    try {
        fos = new FileOutputStream(file);
        myOutWriter = new OutputStreamWriter(fos);
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    SensorEventListener sensor = new SensorEventListener() {

        @Override
        public void onSensorChanged(SensorEvent event) {
            xAxis.setText("xAxis: " + event.values[0]);
            yAxis.setText("yAxis: " + event.values[1]);
            zAxis.setText("zAxis: " + event.values[2]);
            String test = new String(" " + event.values[0] + " "
                    + event.values[1] + " " + event.values[2]);
            writeData(test);
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            // TODO Auto-generated method stub
        }
    };

    sm.registerListener(sensor,
            sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
            SensorManager.SENSOR_DELAY_UI);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public static void writeData(String test) {
    try {

        myOutWriter.append(test);
        myOutWriter.flush();
        myOutWriter.close();
    } catch (FileNotFoundException e) {
        // handle exception
    } catch (IOException e) {
        // handle exception
    }
}

}


共 (3) 个答案

  1. # 1 楼答案

    尝试使用另一个构造函数,将true作为布尔附加值。 http://bit.ly/16lxbld

    fos = new FileOutputStream(file,true);
    
  2. # 2 楼答案

    你每次写的时候都会关闭writer,而不会再次打开它。将日志记录添加到异常中,而不是将其留空,您应该会看到一些堆栈跟踪

    大致如下: 日志e(标记、消息、异常),所以: 日志e(“MainActivity”,“未能将值写入文件”,e)

  3. # 3 楼答案

    也请考虑FielOutPutsStudio

    下面的构造函数
    fos = new FileOutputStream(file,true);