OC 第七天

老牛浏览 327评论 0发表于

主要内容:

  1. 归档

  2. 文件管理实例

  3. json 解析

  4. plist 解析

objectivec
//
//  main.m
//  归档
//

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        /**
         归档:一种存储数据的方式  ,注意:要想实现归档,必须遵守NSCoding协议
         1.什么是协议?

         2.分两种:1.对系统的类进行的归档  2.对自定义的类进行的归档
         */

        //1.什么是协议?  是一个方法列表。  只有方法的声明,本身没有实现,实现放在引用协议的类里面
        //使用:1.创建协议  2.引入到使用类里面  3.让这个类引入这个协议  4.在类的实现当中写协议的实现。

        //格式:@protocol 协议的名字
        //     方法列表
        //     @end
        NSString *path = @"/Users/qianfeng/Desktop/guidang.rtf";

        Person *person = [[Person alloc]init];
        person.name = @"liming";
        [person run];

        //1.对系统的类进行的归档  注意:不止这个类要遵守协议,数组的元素也要遵守协议。
        //1.1创建数组
        NSArray *array = @[@"11",[NSNumber numberWithInt:3],person];
        //1.2归档
        [NSKeyedArchiver archiveRootObject:array toFile:path];
        //解档
        NSArray *newArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

        NSLog(@"%@",newArray);

        // 2.对自定义的类进行的归档
        //创建对象并赋值
        Person *person1 = [[Person alloc]init];
        person1.name = @"wangming";
        person1.age = 30;

        //归档
        [NSKeyedArchiver archiveRootObject:person1 toFile:path];

        //解档
        Person *person4 = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

        NSLog(@"%@,%i",person4.name,person4.age);

        //作用:保值,可以比较长久的保存值(只要不卸掉软件,值就在)
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

        //通过键值对
        [defaults setObject:@"wangwu" forKey:@"name"];

        [defaults setFloat:3 forKey:@"age"];

    }
    return 0;
}

//
//  FileManage.m
//  文件管理实例
//
//  Created by zhaokai on 14-12-2.
//  Copyright (c) 2014年 zhaokai. All rights reserved.
//

#import "FileManage.h"

@implementation FileManage
//私有方法
+(void)replaceStringInTextFile:(NSString *)filePath withOldString:(NSString *)oldString toNewString:(NSString *)newString addingString:(NSString *)adding {
    //5.替换
    //5.1使用文件句柄

    NSFileHandle *handle = [NSFileHandle fileHandleForUpdatingAtPath:filePath];

    //5.2容错处理
    if (!handle) {
        NSLog(@"文件打开失败");
        return;
    }

    //5.3做备份
    NSString *path = [@"/Users/qianfeng/Desktop/共享资料/oc第六天/学生资料/作业/" stringByAppendingString:adding];

    NSFileManager *manager = [NSFileManager defaultManager];

    [manager copyItemAtPath:filePath toPath:path error:nil];

    //5.4获取文件内容
    //注意:当文件比较小的时候,可以直接从头读到尾
    NSData *contentData = [handle readDataToEndOfFile];

    //5.5转化成字符串
    NSString *contentString = [[NSString alloc]initWithData:contentData encoding:NSUTF8StringEncoding];

    //5.6替换
    //作用:会将文件中所有的oldString都替换成newString
    contentString = [contentString stringByReplacingOccurrencesOfString:oldString withString:newString];
    //5.7 清空原来文件的内容
    [handle truncateFileAtOffset:0];

    //5.8写入缓存
    [handle writeData:[contentString dataUsingEncoding:NSUTF8StringEncoding]];

    //5.9写入磁盘
    [handle synchronizeFile];

}

+(void)replaceStringInDirectory:(NSString *)directoryPath withOldString:(NSString *)oldString toNewString:(NSString *)newString fileType:(NSString *)type{
    //1.创建文件管理类
    NSFileManager *manager = [NSFileManager defaultManager];

    //2获取路径下的文件

    NSArray *array = [manager subpathsOfDirectoryAtPath:directoryPath error:nil];

    //3.得到后缀名
    NSString *extension = [@"." stringByAppendingString:type];

    //4获取.txt文件
    //int i = 0;
    for (NSString *component in array) {
        if ([component hasSuffix:extension]) {

            NSString *absolutePath = [directoryPath stringByAppendingString:component];

            [self replaceStringInTextFile:absolutePath withOldString:oldString toNewString:newString addingString:component];
        }
    }
}
@end

//
//  main.m
//  json解析
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    /**
     json简介:json格式的文件  轻量级的解析方式
     重要性:传输数据的格式

     */

    //解析

//    NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:@"/Users/qianfeng/Desktop/共享资料/oc第七天/学生资料/jsonUserList.txt"];
//    NSLog(@"dic%@",dic);
    //先得到文件的内容
    NSString *string = [NSString stringWithContentsOfFile:@"/Users/qianfeng/Desktop/共享资料/oc第七天/学生资料/jsonUserList.txt" encoding:NSUTF8StringEncoding error:nil];

    NSLog(@"%@",string);

    //利用oc自带的json解析器解析
    /**
     第一个参数:将要解析的数据
     第二个参数:(NSJSONReadingOptions)
     NSJSONReadingMutableContainers = (1UL << 0),  顶层是字典或数组
     NSJSONReadingMutableLeaves = (1UL << 1),  顶层是字符串
     NSJSONReadingAllowFragments = (1UL << 2) 顶层不能是字典或数组
     */

    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    //解析
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

    NSLog(@"dic%@",dic[@"count"]);

}

//
//  main.m
//  plist解析
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        /**
        plist:存储的是NSDictionary,NSArray,NSNumber,BOOL,NSString内容。
         大多数情况下最外层是字典
         作用:存储属性,属性级的存储方式。
         */

        //1.找到plist文件,找路径
        NSString *path = @"/Users/qianfeng/Desktop/共享资料/oc第七天/学生资料/myInfo.plist";
        //2.创建一个空的字典
        NSMutableDictionary *dictionary  = [[NSMutableDictionary alloc]init];

        //预处理命令  条件编译
#if 1
        //3.添加数据
        [dictionary setObject:[NSNumber numberWithInt:4] forKey:@"age"];
        [dictionary setObject:[NSNumber numberWithChar:'c'] forKey:@"symbol"];
        [dictionary setObject:@"lilei" forKey:@"name"];

        [dictionary setObject:@[@"chinese",@"english"] forKey:@"Score"];

        //4.将数据写入plist文件
        //第二个参数:如果写到一半,发生了别的事情,不能继续,写完的部分是否保留。
        [dictionary writeToFile:path atomically:YES];

#else
        dictionary = [NSDictionary dictionaryWithContentsOfFile:path];

        NSLog(@"dictionary:%@",dictionary);
#endif

    }
    return 0;
}
点赞
收藏
暂无评论,快来发表评论吧~
私信
老牛@ilaoniu
老牛,俗称哞哞。单纯的九零后理工小青年。喜欢折腾,爱玩,爱音乐,爱游戏,爱电影,爱旅游...
最后活跃于