用不同的数据行填充日志文件



我的android应用程序通过BLE连续接收传感器加速度数据和时间戳。通过按下我的活动上的保存按钮,它会生成一个包含接收到的数据的日志文件。但不幸的是,在文件中只有一行我的数据,最后收到。但我想在文件中导出更多行,直到按按钮退出。这是我在onCreate中的相关代码-method:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_server_interact);
//initialize views
mSaveBtn = findViewById(R.id.save);
//handle button click
mSaveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//text for export to file
mX_Axis = result_X;
mY_Axis = result_Y;
mZ_Axis = result_Z;
mTime = Long.toString(Timestamp);

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_DENIED){
String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
//show PopUp for runtime permission
requestPermissions(permissions,WRITE_EXTERNAL_STORAGE_CODE);
}
else{
//permissions are accepted, now memory data
saveToTxtFile(mX_Axis, mY_Axis, mZ_Axis, mTime);
}
}
else {
saveToTxtFile(mX_Axis, mY_Axis, mZ_Axis, mTime);
}
}
});
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case WRITE_EXTERNAL_STORAGE_CODE:{
if(grantResults.length > 0 && grantResults[0]
== PackageManager.PERMISSION_GRANTED){
//permissions accepted, memory data
saveToTxtFile(mX_Axis, mY_Axis, mZ_Axis, mTime);
}
else{
//permisssions not accepted, show toast
Toast.makeText(this, "Storage permission is required to store data", Toast.LENGTH_SHORT).show();
}
}
}
}
private void saveToTxtFile(String mX_Axis, String mY_Axis, String mZ_Axis, String mTime) {
//catch current time for dataname
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(System.currentTimeMillis());
try{
//path to storage
File path = Environment.getExternalStorageDirectory();
//create folder with name "myProject_BLE-Data"
File dir = new File(path + "/myProject_BLE-Data/");
dir.mkdirs();
//Dataname
String fileName = "myProject_" + timeStamp + ".txt";
File file = new File(dir, fileName);
//FileWriter class to store characters in file
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write("  X-Axis      Y-Axis      Z-Axis     State                   Timestampn");
bw.write("_______________________________________________________________________________________n");
bw.write(" ");
bw.write(mX_Axis);
bw.write("    ");
bw.write(mY_Axis);
bw.write("    ");
bw.write(mZ_Axis);
bw.write("    ");
if (NotificationValue [1] == 0x00) {bw.write(     "State: defect          ");}
else if (NotificationValue [1] == 0x01) {bw.write("State: OK              ");}
else if (NotificationValue [1] == 0x02) {bw.write("State nearly defect     ");}
bw.write(mTime);
bw.close();
//show filename and path in toast
Toast.makeText(this, fileName+"is saved ton" +dir, Toast.LENGTH_SHORT).show();
}
catch (Exception e){
//if something goes wrong...
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}

该块应该只通过创建文件生成一次:

bw.write("  X-Axis      Y-Axis      Z-Axis     State                   Timestampn");
bw.write("_______________________________________________________________________________________n");

这个块表示我连续接收到的数据行:

bw.write(" ");
bw.write(mX_Axis);
bw.write("    ");
bw.write(mY_Axis);
bw.write("    ");
bw.write(mZ_Axis);
bw.write("    ");
if (NotificationValue [1] == 0x00) {bw.write(     "State: defect          ");}
else if (NotificationValue [1] == 0x01) {bw.write("State: OK              ");}
else if (NotificationValue [1] == 0x02) {bw.write("State nearly defect     ");}
bw.write(mTime);
bw.close();

当我收到通知时,我需要在同一文件中每次生成更多行数据(或者通常:每次发生特殊事件时)。但我找不到这样做的方法。它每次生成一个只有一行的新文件。我试了很多次。请帮助…

你可以设置FileWriter在你创建它的时候追加FileWriter(file.getAbsoluteFile(), true)——这样FileWriter将追加到现有的文件而不是重写。

按钮事件也只触发一次-如果你想持续保存数据,你必须设置一个循环运行,直到你再次按下按钮。

最新更新