Cocos2d-x学习笔记之数据存取方式
来源:互联网 发布:51单片机读取sd卡视频 编辑:程序博客网 时间:2024/05/16 03:42
//
// FilesScene.cpp
// Demo02
//
// Created by Neworigin on 17/8/21.
//
//
#include "FilesScene.hpp"
Scene* FilesScene::createScene(){
auto scene = Scene::create();
auto layer = FilesScene::create();
scene->addChild(layer);
return scene;
}
bool FilesScene::init(){
if(!Layer::init()){
return false;
}
//addUserDefault();
//getFilePath();
parseJson();
// parseXML();
return true;
}
//userDefault
void FilesScene::addUserDefault(){
//获取单例
auto userDefault = UserDefault::getInstance();
//设置int类型的数据
userDefault->setIntegerForKey("keyI", 10);
//读取int类型的数据 如果Key不存在 返回传入的默认参数 若存在返回key值对应的value
auto keyI = userDefault->getIntegerForKey("keyI",100);
CCLOG("KeyI = %d",keyI);
auto key = userDefault->getIntegerForKey("key = %d",12);
CCLOG("key = %d",key);
//设置bool类型的数据
userDefault->setBoolForKey("keyB", true);
auto keyB = userDefault->getBoolForKey("keyB");
CCLOG("keyB = %d",keyB);
//设置double类型的数据
userDefault->setDoubleForKey("keyD", 3.33);
auto keyD = userDefault->getDoubleForKey("keyD");
CCLOG("keyD = %lf",keyD);
//设置String类型的数据
userDefault->setStringForKey("keyS", "hello");
auto keyS = userDefault->getStringForKey("keyS");
CCLOG("keyS = %s",keyS.c_str());
//设置float类型的数据
userDefault->setFloatForKey("keyF",4.3336);
auto keyF = userDefault->getFloatForKey("ketF");
CCLOG("keyF = %f",keyF);
//获取文件路径
auto path = userDefault->getXMLFilePath();
CCLOG("path = %s",path.c_str());
//判断文件是否存在
if(!userDefault->isXMLFileExist()){
CCLOG("文件不存在!");
}
}
//获取文件
void FilesScene::getFilePath(){
//获取文件路径单例类
auto fu = FileUtils::getInstance();
//获取可写文件路径
auto writePath = fu->getWritablePath();
CCLOG("writePath:%s",writePath.c_str());
//路径拼接
writePath += "data.txt";
//判断文件路径是否存在
if(!fu->isFileExist(writePath)){
//获取资源文件路径
auto filePath = fu->fullPathForFilename("data.txt");
//获取文件内容
auto fileData = fu->getStringFromFile(filePath);
//以写的方式打开文件
auto file = fopen(writePath.c_str(),"w");
//判断文件是否打开成功
if(file){
//写入数据
fputs(fileData.c_str(), file);
//清空缓存
fflush(file);
//关闭文件
fclose(file);
}else{
CCLOG("打开文件失败");
return;
}
}else{
auto file = fopen(writePath.c_str(),"w");
if(file){
fputs("hello", file);
fclose(file);
}else{
return;
}
}
//读取可写文件内容
auto data = fu->getStringFromFile(writePath);
CCLOG("data:%s",data.c_str());
}
//json
void FilesScene::parseJson(){
//获取路径
auto fileUtils = FileUtils::getInstance();
//获取可写文件路径
auto writePath = fileUtils->getWritablePath();
//路径拼接
writePath += "Data2.json";
//判断可写文件路径是否存在
if(!fileUtils->isFileExist(writePath)){
//拷贝文件内容
//获取资源文件路径
auto filePath = fileUtils->fullPathForFilename("data.json");
//获取文件内容
auto fileData = fileUtils->getStringFromFile(filePath);
//打开可写文件路径
auto file = fopen(writePath.c_str(),"w");
//判断打开文件是否成功
if(file){
//向可写文件 写入数据
fputs(fileData.c_str(), file);
//清空缓存
fflush(file);
//关闭可写文件
fclose(file);
}
}
//获取可写文件内容
auto data = fileUtils->getStringFromFile(writePath);
CCLOG("data:%s",data.c_str());
//解析
Document doc;
//解析字符串<解码格式 通常使用默认的解码格式>
doc.Parse<rapidjson::kParseDefaultFlags>(data.c_str());
//判断解析是否成功
if(doc.HasParseError()){
CCLOG("解析出错");
return;
}
//判断元素user是否存在
if(doc.HasMember("user")){
rapidjson::Value& user = doc["user"];
//判断是否是数组
if(user.IsArray()){
rapidjson::Value& user_1 = user[1];
//判断是否是对象
if(user_1.IsObject()){
rapidjson::Value& name = user_1["name"];
//获取name的值
CCLOG("name = %s",name.GetString());
rapidjson::Value& password = user_1["password"];
//获取Int类型的值
CCLOG("password:%d",password.GetInt());
}
}
}
rapidjson::Value& weaponName = doc["weapon"][0]["name"];
CCLOG("name=%s",weaponName.GetString());
CCLOG("writePath:%s",writePath.c_str());
//初始化缓冲区
rapidjson::StringBuffer buffer;
//初始化写入器
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
//写入doc
doc.Accept(writer);
//打开可写文件
FILE* file = fopen(writePath.c_str(),"wb");
if(file){
fputs(buffer.GetString(),file);
fclose(file);
}
/*
//添加成员(key值,value值)
doc.AddMember("name","name",doc.GetAllocator());
rapidjson::Value& user = doc["user"][0];
user.AddMember("name","new",doc.GetAllocator());
*/
//修改
// doc["user"][1]["password"].SetInt(111111);
//删除
// doc.RemoveMember("name");
}
//xml
void FilesScene::parseXML(){
auto fileUtils = FileUtils::getInstance();
auto writePath = fileUtils->getWritablePath();
writePath += "test2.xml";
//判断文件是否存在
if(!fileUtils->isFileExist(writePath)){
//拷贝内容
auto filePath = fileUtils->fullPathForFilename("test.xml");
//获取资源文件的内容
auto fileData = fileUtils->getStringFromFile(filePath);
//打开可写文件
auto file = fopen(writePath.c_str(), "w");
//
if(file){
fputs(fileData.c_str(), file);
fclose(file);
}
}
auto data = fileUtils->getStringFromFile(writePath);
CCLOG("data:%s",data.c_str());
//加载文档
tinyxml2::XMLDocument* doc = new XMLDocument();
//获取错误返回码
XMLError errorID = doc->LoadFile(writePath.c_str());
//判断解析是否成功
if(errorID!=0){
CCLOG("解析失败");
delete doc;
return;
}
//获取根节点
XMLElement* root = doc->RootElement();
CCLOG("rootKey:%s",root->Value());
CCLOG("rootValue:%s",root->GetText());
//获取第一个子节点
XMLElement* user = root->FirstChildElement();
CCLOG("userKey:%s",user->Value());
CCLOG("userValue:%s",user->GetText());
//获取admin
XMLElement* admin1 = user->FirstChildElement();
CCLOG("admin1Key:%s",admin1->Value());
CCLOG("admin1Value:%s",admin1->GetText());
//获取admin的下一个节点
XMLElement* admin2 = admin1->NextSiblingElement();
CCLOG("admin2Key:%s",admin2->Value());
CCLOG("admin2Value:%s",admin2->GetText());
//获取name
XMLElement* name = admin2->FirstChildElement();
CCLOG("nameKey:%s",name->Value());
CCLOG("nameValue:%s",name->GetText());
//获取密码 root->user->admin->name->passwpord
XMLElement* password = doc->RootElement()->FirstChildElement()->FirstChildElement()->FirstChildElement()->NextSiblingElement();
CCLOG("passwordKey:%s",password->Value());
CCLOG("passwordValue:%s",password->GetText());
/*
//添加节点
XMLElement* newNode = doc->NewElement("AGE");
//新键内容
auto text = doc->NewText("1111111");
//将内容添加到标签内
newNode->LinkEndChild(text);
//给标签设置属性 标记
newNode->SetAttribute("info", "the pid");
//添加标签
user->LinkEndChild(newNode);
//保存修改
doc->SaveFile(writePath.c_str());
*/
/*
//修改节点
XMLNode* oldNode = user->FirstChild()->NextSibling()->NextSibling();
CCLOG("oldNode=%s",oldNode->Value());
oldNode->SetValue("NODE");
//保存修改
doc->SaveFile(writePath.c_str());
*/
/*
//删除
XMLElement* deleteNode = admin2->NextSiblingElement();
//删除子节点
user->DeleteChild(deleteNode);
doc->SaveFile(writePath.c_str());
*/
}
// FilesScene.cpp
// Demo02
//
// Created by Neworigin on 17/8/21.
//
//
#include "FilesScene.hpp"
Scene* FilesScene::createScene(){
auto scene = Scene::create();
auto layer = FilesScene::create();
scene->addChild(layer);
return scene;
}
bool FilesScene::init(){
if(!Layer::init()){
return false;
}
//addUserDefault();
//getFilePath();
parseJson();
// parseXML();
return true;
}
//userDefault
void FilesScene::addUserDefault(){
//获取单例
auto userDefault = UserDefault::getInstance();
//设置int类型的数据
userDefault->setIntegerForKey("keyI", 10);
//读取int类型的数据 如果Key不存在 返回传入的默认参数 若存在返回key值对应的value
auto keyI = userDefault->getIntegerForKey("keyI",100);
CCLOG("KeyI = %d",keyI);
auto key = userDefault->getIntegerForKey("key = %d",12);
CCLOG("key = %d",key);
//设置bool类型的数据
userDefault->setBoolForKey("keyB", true);
auto keyB = userDefault->getBoolForKey("keyB");
CCLOG("keyB = %d",keyB);
//设置double类型的数据
userDefault->setDoubleForKey("keyD", 3.33);
auto keyD = userDefault->getDoubleForKey("keyD");
CCLOG("keyD = %lf",keyD);
//设置String类型的数据
userDefault->setStringForKey("keyS", "hello");
auto keyS = userDefault->getStringForKey("keyS");
CCLOG("keyS = %s",keyS.c_str());
//设置float类型的数据
userDefault->setFloatForKey("keyF",4.3336);
auto keyF = userDefault->getFloatForKey("ketF");
CCLOG("keyF = %f",keyF);
//获取文件路径
auto path = userDefault->getXMLFilePath();
CCLOG("path = %s",path.c_str());
//判断文件是否存在
if(!userDefault->isXMLFileExist()){
CCLOG("文件不存在!");
}
}
//获取文件
void FilesScene::getFilePath(){
//获取文件路径单例类
auto fu = FileUtils::getInstance();
//获取可写文件路径
auto writePath = fu->getWritablePath();
CCLOG("writePath:%s",writePath.c_str());
//路径拼接
writePath += "data.txt";
//判断文件路径是否存在
if(!fu->isFileExist(writePath)){
//获取资源文件路径
auto filePath = fu->fullPathForFilename("data.txt");
//获取文件内容
auto fileData = fu->getStringFromFile(filePath);
//以写的方式打开文件
auto file = fopen(writePath.c_str(),"w");
//判断文件是否打开成功
if(file){
//写入数据
fputs(fileData.c_str(), file);
//清空缓存
fflush(file);
//关闭文件
fclose(file);
}else{
CCLOG("打开文件失败");
return;
}
}else{
auto file = fopen(writePath.c_str(),"w");
if(file){
fputs("hello", file);
fclose(file);
}else{
return;
}
}
//读取可写文件内容
auto data = fu->getStringFromFile(writePath);
CCLOG("data:%s",data.c_str());
}
//json
void FilesScene::parseJson(){
//获取路径
auto fileUtils = FileUtils::getInstance();
//获取可写文件路径
auto writePath = fileUtils->getWritablePath();
//路径拼接
writePath += "Data2.json";
//判断可写文件路径是否存在
if(!fileUtils->isFileExist(writePath)){
//拷贝文件内容
//获取资源文件路径
auto filePath = fileUtils->fullPathForFilename("data.json");
//获取文件内容
auto fileData = fileUtils->getStringFromFile(filePath);
//打开可写文件路径
auto file = fopen(writePath.c_str(),"w");
//判断打开文件是否成功
if(file){
//向可写文件 写入数据
fputs(fileData.c_str(), file);
//清空缓存
fflush(file);
//关闭可写文件
fclose(file);
}
}
//获取可写文件内容
auto data = fileUtils->getStringFromFile(writePath);
CCLOG("data:%s",data.c_str());
//解析
Document doc;
//解析字符串<解码格式 通常使用默认的解码格式>
doc.Parse<rapidjson::kParseDefaultFlags>(data.c_str());
//判断解析是否成功
if(doc.HasParseError()){
CCLOG("解析出错");
return;
}
//判断元素user是否存在
if(doc.HasMember("user")){
rapidjson::Value& user = doc["user"];
//判断是否是数组
if(user.IsArray()){
rapidjson::Value& user_1 = user[1];
//判断是否是对象
if(user_1.IsObject()){
rapidjson::Value& name = user_1["name"];
//获取name的值
CCLOG("name = %s",name.GetString());
rapidjson::Value& password = user_1["password"];
//获取Int类型的值
CCLOG("password:%d",password.GetInt());
}
}
}
rapidjson::Value& weaponName = doc["weapon"][0]["name"];
CCLOG("name=%s",weaponName.GetString());
CCLOG("writePath:%s",writePath.c_str());
//初始化缓冲区
rapidjson::StringBuffer buffer;
//初始化写入器
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
//写入doc
doc.Accept(writer);
//打开可写文件
FILE* file = fopen(writePath.c_str(),"wb");
if(file){
fputs(buffer.GetString(),file);
fclose(file);
}
/*
//添加成员(key值,value值)
doc.AddMember("name","name",doc.GetAllocator());
rapidjson::Value& user = doc["user"][0];
user.AddMember("name","new",doc.GetAllocator());
*/
//修改
// doc["user"][1]["password"].SetInt(111111);
//删除
// doc.RemoveMember("name");
}
//xml
void FilesScene::parseXML(){
auto fileUtils = FileUtils::getInstance();
auto writePath = fileUtils->getWritablePath();
writePath += "test2.xml";
//判断文件是否存在
if(!fileUtils->isFileExist(writePath)){
//拷贝内容
auto filePath = fileUtils->fullPathForFilename("test.xml");
//获取资源文件的内容
auto fileData = fileUtils->getStringFromFile(filePath);
//打开可写文件
auto file = fopen(writePath.c_str(), "w");
//
if(file){
fputs(fileData.c_str(), file);
fclose(file);
}
}
auto data = fileUtils->getStringFromFile(writePath);
CCLOG("data:%s",data.c_str());
//加载文档
tinyxml2::XMLDocument* doc = new XMLDocument();
//获取错误返回码
XMLError errorID = doc->LoadFile(writePath.c_str());
//判断解析是否成功
if(errorID!=0){
CCLOG("解析失败");
delete doc;
return;
}
//获取根节点
XMLElement* root = doc->RootElement();
CCLOG("rootKey:%s",root->Value());
CCLOG("rootValue:%s",root->GetText());
//获取第一个子节点
XMLElement* user = root->FirstChildElement();
CCLOG("userKey:%s",user->Value());
CCLOG("userValue:%s",user->GetText());
//获取admin
XMLElement* admin1 = user->FirstChildElement();
CCLOG("admin1Key:%s",admin1->Value());
CCLOG("admin1Value:%s",admin1->GetText());
//获取admin的下一个节点
XMLElement* admin2 = admin1->NextSiblingElement();
CCLOG("admin2Key:%s",admin2->Value());
CCLOG("admin2Value:%s",admin2->GetText());
//获取name
XMLElement* name = admin2->FirstChildElement();
CCLOG("nameKey:%s",name->Value());
CCLOG("nameValue:%s",name->GetText());
//获取密码 root->user->admin->name->passwpord
XMLElement* password = doc->RootElement()->FirstChildElement()->FirstChildElement()->FirstChildElement()->NextSiblingElement();
CCLOG("passwordKey:%s",password->Value());
CCLOG("passwordValue:%s",password->GetText());
/*
//添加节点
XMLElement* newNode = doc->NewElement("AGE");
//新键内容
auto text = doc->NewText("1111111");
//将内容添加到标签内
newNode->LinkEndChild(text);
//给标签设置属性 标记
newNode->SetAttribute("info", "the pid");
//添加标签
user->LinkEndChild(newNode);
//保存修改
doc->SaveFile(writePath.c_str());
*/
/*
//修改节点
XMLNode* oldNode = user->FirstChild()->NextSibling()->NextSibling();
CCLOG("oldNode=%s",oldNode->Value());
oldNode->SetValue("NODE");
//保存修改
doc->SaveFile(writePath.c_str());
*/
/*
//删除
XMLElement* deleteNode = admin2->NextSiblingElement();
//删除子节点
user->DeleteChild(deleteNode);
doc->SaveFile(writePath.c_str());
*/
}
阅读全文
0 0
- Cocos2d-x学习笔记之数据存取方式
- Cocos2d-x学习笔记之Cocos2d-x开发环境搭建
- 【cocos2d-x 3.x 学习笔记】对象创建方式讨论
- 学习笔记cocos2d-x之项目分析
- 学习笔记cocos2d-x之元素介绍
- Cocos2d-x 学习笔记
- Cocos2d-x学习笔记
- Cocos2d-x学习笔记
- Cocos2d-x学习笔记
- cocos2d-x学习笔记
- cocos2d-x学习笔记
- cocos2d-x 学习笔记
- cocos2d-x 学习笔记
- cocos2d-x学习笔记
- Cocos2d-x 学习笔记
- Cocos2d-x 学习笔记
- cocos2d-x学习笔记
- cocos2d-x学习笔记
- 受保护的成员变量和方法(protected)
- VMware Workstation12安装Ubuntu和VMware Tools教程
- 6.2 代理的应用
- 【模板】第二类斯特林数Stirling
- Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
- Cocos2d-x学习笔记之数据存取方式
- MySQLWorkbench根据已有EER图导出sql脚本文件
- 新疆大学(新大)OJ xju 1010: 四个年级 C++ STL map 将4层循环优化成2层循环可解
- 洛谷P3933 Chtholly Nota Seniorious 【二分 + 贪心 + 矩阵旋转】
- Ubuntu14.04安装OpenCV
- 常见清除浮动方法总结
- shiro源码分析篇3:用户登录缓存登录信息
- 个人总结11
- Ubuntu 16.04 系统快捷键推荐设置