Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中向现有的.txt文件添加数据_Android_File Io_Accelerometer - Fatal编程技术网

如何在android中向现有的.txt文件添加数据

如何在android中向现有的.txt文件添加数据,android,file-io,accelerometer,Android,File Io,Accelerometer,我正在开发一个应用程序,读取来自加速计的数据,我想将它们保存在.txt文件中,以便以后处理它们 到目前为止,我已经能够获得读数,并且只保存一次读数,因为据我所知,我总是创建一个新文件,覆盖以前存在的文件。但是我想要的是,从我按下开始按钮的那一刻起,直到我按下停止按钮为止,所有的测量值 以下是我正在使用的代码: public class MainActivity extends AppCompatActivity implements SensorEventListener, View.OnCli

我正在开发一个应用程序,读取来自加速计的数据,我想将它们保存在.txt文件中,以便以后处理它们

到目前为止,我已经能够获得读数,并且只保存一次读数,因为据我所知,我总是创建一个新文件,覆盖以前存在的文件。但是我想要的是,从我按下开始按钮的那一刻起,直到我按下停止按钮为止,所有的测量值

以下是我正在使用的代码:

public class MainActivity extends AppCompatActivity implements SensorEventListener, View.OnClickListener {

private SensorManager mSensorManager;

private Sensor mAccelerometer;
private Button bStart, bStop;
float[] acceleration = new float[3];
private String mString;

MyFile file = new MyFile(this);


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    bStart = (Button)findViewById(R.id.start);
    bStop = (Button)findViewById(R.id.stop);

    mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

    bStart.setOnClickListener(this);
    bStop.setOnClickListener(this);
    bStart.setEnabled(true);
    bStop.setEnabled(false);
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}

public final void onSensorChanged(SensorEvent event){
    if(event.sensor.getType() ==  Sensor.TYPE_ACCELEROMETER){
        acceleration[0] = event.values[0];
        acceleration[1] = event.values[1];
        acceleration[2] = event.values[2];
        TextView mTextview1 = (TextView) findViewById(R.id.textView1);
        TextView mTextview2 = (TextView) findViewById(R.id.textView2);
        TextView mTextview3 = (TextView) findViewById(R.id.textView3);
        mTextview1.setText("X:"+String.valueOf( acceleration[0]));
        mTextview2.setText("Y:"+String.valueOf( acceleration[1]));
        mTextview3.setText("Z:"+String.valueOf( acceleration[2]));

        file.writeToSD(acceleration[0] + "," +acceleration[1] + "," +acceleration[2] + "\n");
    }
}

@Override
public void onClick(View v) {
    switch(v.getId()){
        case R.id.start:
            bStart.setEnabled(false);
            bStop.setEnabled(true);
            mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
            break;
        case R.id.stop:
            bStart.setEnabled(true);
            bStop.setEnabled(false);
            mSensorManager.unregisterListener(this);
            break;
    }
}
}

和MyFile类,完成作业的位置如下所示:

public class MyFile {

String TAG = "MyFile";
Context context;

public MyFile(Context context) {
    this.context = context;
}

public Boolean writeToSD(String text) {
    Boolean write_successful = false;
    File root = null;
    try {
        // check for SDcard
        root = Environment.getExternalStorageDirectory();
        Log.i(TAG, "path.." + root.getAbsolutePath());

        //check sdcard permission
        if (root.canWrite()) {
            File fileDir = new File(root.getAbsolutePath());
            fileDir.mkdirs();

            File file = new File(fileDir, "samplefile.txt");
            FileWriter filewriter = new FileWriter(file);
            BufferedWriter out = new BufferedWriter(filewriter);
            out.append(text);
            out.flush();
            out.close();
            write_successful = true;
        }
    } catch (IOException e) {
       e.printStackTrace();
        write_successful = false;
    }
    return write_successful;
}
}

我的另一个问题是,为什么我不能将.txt文件存储在SD卡中,而是保存在内存中


感谢您的时间和帮助

请尝试此代码。将FileWriter的第二个参数设置为true。因此,您可以附加现有文件

 File file = new File("Hello.txt");    
 file.createNewFile();    
 FileWriter writer = new FileWriter(file,true); 
 writer.write("Writes the content to the file"); 
 writer.flush();
 writer.close();

传递第二个参数true以追加到文件中。与此类似,FileWriter fw=newfilewriteroutfilename,true;非常感谢你。成功了。顺便问一下,我能问一下为什么使用此代码.txt文件会保存在设备的内部内存中而不是SD卡中?我已经使用了您在emulator或device中测试的权限?您可以检查它在记录器中打印的路径。您已经打印了该路径。所以检查它,它会返回内存中的路径。我不明白为什么会这样。我正在这两方面进行测试。在实际设备中,我在内存中找到了该文件。在emulator中,我没有访问内部内存的权限,因此您可以对此进行检查-