1. 打开 JSON 文件:在 `QFile` 中使用 `open` 方法打开 JSON 文件,并设置打开模式为读写模式。例如:
```cpp
QFile file("example.json")
if (!file.open(QIODevice::ReadWrite)) {
// 处理文件打开失败的情况
}
```
在上面的示例中,我们打开了名为 `example.json` 的 JSON 文件,并将打开模式设置为读写模式。
2. 读取 JSON 数据:在 `QFile` 中使用 `readAll` 方法读取 JSON 文件的所有内容,并将其存储为一个 `QByteArray` 对象。例如:
```cpp
QByteArray data = file.readAll()
```
在上面的示例中,我们使用 `readAll` 方法读取 JSON 文件的所有内容,并将其存储为一个 `QByteArray` 对象。
3. 解析 JSON 数据:使用 `QJsonDocument` 类的 `fromJson` 方法将 `QByteArray` 对象解析为 JSON 数据。例如:
```cpp
QJsonDocument doc = QJsonDocument::fromJson(data)
```
在上面的示例中,我们使用 `QJsonDocument` 类的 `fromJson` 方法将 `QByteArray` 对象解析为 JSON 数据,并将其存储为一个 `QJsonDocument` 对象。
4. 修改 JSON 数据:通过 `QJsonDocument` 对象修改 JSON 数据。例如:
```cpp
QJsonObject obj = doc.object()
obj["name"] = "John"
doc.setObject(obj)
```
在上面的示例中,我们首先通过 `QJsonDocument` 对象的 `object` 方法获取 JSON 数据的 `QJsonObject` 对象,然后修改该对象的 `"name"` 属性,并使用 `setObject` 方法更新 `QJsonDocument` 对象。
5. 写入 JSON 数据:在 `QFile` 中使用 `write` 方法将修改后的 JSON 数据写入文件。例如:
```cpp
file.seek(0)
file.write(doc.toJson())
```
在上面的示例中,我们首先使用 `seek` 方法将文件指针移动到文件开头,然后使用 `write` 方法将修改后的 JSON 数据写入文件。
6. 关闭文件:在完成文件 *** 作后,使用 `close` 方法关闭 `QFile` 对象。例如:
```cpp
file.close()
```
在上面的示例中,我们使用 `close` 方法关闭了 `QFile` 对象。
以上就是同时读写 JSON 文件的步骤。需要注意的是,在实际应用中,还需要考虑一些异常情况,如文件打开失败、文件读取失败、JSON 解析失败等,需要添加适当的错误处理代码来处理这些异常情况。
表 5 QDataStream常用方法成员方法 功 能
bool QDataStream::atEnd() const 判断是否读到文件末尾,如果已经达到末尾,返回 true,否则返回 false。
QDataStream &QDataStream::readBytes(char *&s, uint &l) 对于用 writeBytes() 方法写入文件的 l 和 s,只能使用 readBytes() 方法读取出来。
int QDataStream::readRawData(char *s, int len) 从文件中读取最多 len 字节的数据到 s 中,返回值表示实际读取的字节数。注意,调用该方法之前,需要先给 s 参数分配好内存空间。
void QDataStream::setVersion(int v) 不同版本的 Qt 中,同名称的数据类型也可能存在差异,通过调用此方法手动指定版本号,可以确保读取数据的一致性。
int QDataStream::skipRawData(int len) 跳过文件中的 len 个字节,返回实际跳过的字节数。
QDataStream &QDataStream::writeBytes(const char *s, uint len) 将长度 len 和 s 一起写入到文件中,对于 writeBytes() 写入的数据,只能用 readBytes() 方法读取。
int QDataStream::writeRawData(const char *s, int len) 将 s 中前 len 字节的数据写入文件,返回值表示成功写入的字节数。
QDataStream 类也对<<和>>进行了重载,举个简单的例子,用 QDataStream 重新实现实例二:
#include <QFile>
#include <QDebug>
#include <QDataStream>
int main(int argc, char *argv[])
{
//指定要写入文件的数据
qint32 nums[5]={1,2,3,4,5}
QFile file("D:/demo.dat")
file.open(QIODevice::WriteOnly)
//创建 QDataStream 对象
QDataStream out(&file)
//将 nums 数组中的整数逐个写入到二进制文件中
for(int i=0i<5i++){
out <<nums[i]
}
file.close()
//再次打开文件,读取文件中存储的二进制数据
file.open(QIODevice::ReadOnly)
QDataStream in(&file)
//读取二进制文件中的数据
while(!in.atEnd()){
//每次读取一个整数
qint32 num
in >>num
qDebug() <<num
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)