可以先了解下Android中C++层fstream用法详解-CSDN博客
网上很多方法,都是先读取文件所有内容,再在文件倒数第二行新增数据,再将所有内容写入到另一个新文件中,这对于大文件操作时很不友好,影响系统性能。
请注意如果使用seekp写入数据到文件时,写入的数据会覆盖后面的内容。这适合最后一行规固定的,如果还需要最后一行,那就再将最后一行的内容再写入文件即可。
cpp
void writeDataToFile() {
fstream ooStream;
//由于是插入到指定位置,所以此处不能是ios::app
ooStream.open("file.json", ios::out | ios::in);
if (!ooStream.is_open()) {
//文件打开失败
ALOGD("Can not open file");
return;
} else {
ALOGD("open sccuess!");
}
//将文件读指针定位到文件末尾,假设文件末尾没有\n
ooStream.seekg(0, ios::end);
//获取文件大小
std::streampos fileSize = ooStream.tellp();
long pos = (long)fileSize;
while (pos > 0) {
//每次减1,往前移动,寻找\n
ooStream.seekg(--pos);
char c;
//获取ooStream当前的字符是什么
ooStream.get(c);
//判断ooStream当前的字符是否是回车符
if (c == '\n') {
//是回车符,则退出循环,这就到了倒数第二行的末尾,注意倒数第一行没有回车符
break;
}
}
//将文件的写指针定位到pos,即第二行文件末尾
ooStream.seekp(pos);
//写数据
ooStream << "write data";
//关闭文件流
ooStream.close();
}