标签:
1 <font size="3">#import <Foundation/Foundation.h> 2 #import "Student.h" 3 int main(int argc, const char * argv[]) { 4 @autoreleasepool { 5 6 //1. NSFileManager:文件管理器类(用于管理文件或者目录) 7 //2. 文件路径:用字符串存储 8 //3. 文件路径:绝对路径、相对路径。 9 10 //4.NSCoding协议:将数据持久化(即将内存中的数据保存到文件) 11 //5. NSCoder的派生类:NSKeyedArchiver、NSKeyedUnarchiver 12 13 Student* s = [[Student alloc] initWithName:@"张三" andAge:20]; 14 Student* s1 = [[Student alloc] initWithName:@"李四" andAge:21]; 15 Student* s2 = [[Student alloc] initWithName:@"王五" andAge:22]; 16 17 //将学生s信息持久化(保存在文件中)二进制文件 xml文件 json文件 数据库文件 18 19 //5.1 NSKeyedArchiver 归档 20 [NSKeyedArchiver archiveRootObject:s toFile:@"a.txt"]; 21 22 //集合:注意,集合以及几个内对象所属类中需要遵循NSCoding协议并实现方法。 23 NSMutableArray* array = [[NSMutableArray alloc] initWithObjects: s, s1, s2, nil]; 24 [NSKeyedArchiver archiveRootObject:array toFile:@"b.txt"]; 25 26 NSArray* array1 = [NSArray arrayWithObjects:@"Hello",@"World",nil]; 27 [NSKeyedArchiver archiveRootObject:array1 toFile:@"c.txt"]; 28 //如果即将归档的集合元素所属类中没有遵循NSCoding协议,程序会出现崩溃。 29 30 //5.2 NSKeyedUnarchiver 解档 31 id object = [NSKeyedUnarchiver unarchiveObjectWithFile:@"b.txt"]; 32 //参数文件路径(文件需要存在)返回值:存储在文件中的数据 33 if ([object isKindOfClass:[NSMutableArray class]]) { 34 for (id astudent in object) { 35 NSLog(@"%@",astudent); 36 [astudent print]; 37 } 38 } 39 40 [array release]; 41 [s dealloc]; 42 [s1 dealloc]; 43 44 // /Users/fang/a.txt 45 NSFileManager* fm = [NSFileManager defaultManager]; 46 //6. 文件管理器类对象 47 48 NSString* path = NSHomeDirectory(); 49 NSLog(@"path:%@",path); 50 [path stringByAppendingPathComponent:@"a.txt"]; 51 //用于追加路径组成部分,分隔符/会自动添加 52 // [pathstringByAppendingFormat:@"/a.txt"]; 53 // //用于实现字符串的追加,分隔符/需要手动添加 54 55 //7. 创建文件 56 //参数一:文件路径 参数二:文件内容 参数三:文件属性 57 BOOL y = [fm createFileAtPath:path contents:nil attributes:nil]; 58 //@"/Users/fang/a.txt" 硬编码路径(尽量不使用) 59 if (y) { 60 NSLog(@"文件创建成功"); 61 } 62 63 //8. 判断指定文件是否存在 64 y = [fm fileExistsAtPath:@"a.txt"];//参数:文件路径 65 if (y) { 66 NSLog(@"文件在当前目录中存在!"); 67 } 68 else 69 NSLog(@"文件在当前目录中不存在!"); 70 //用途:用作文件内容拷贝 71 NSError* error; 72 73 //9. 判读文件是否存在 存在先删除目的文件再拷贝 74 if ([fm fileExistsAtPath:@"ac.txt"]) { 75 [fm removeItemAtPath:@"ac.txt" error:&error]; 76 } 77 //10. 文件内容拷贝 78 //a.txt 单个学生的信息。 79 y = [fm copyItemAtPath:@"a.txt" toPath:@"ac.txt" error:&error]; 80 //参数一:源文件路径 参数二:目的文件路径 参数三: 接收错误 81 if (y) { 82 NSLog(@"文件拷贝成功!"); 83 } 84 else 85 NSLog(@"文件拷贝失败!"); 86 Student* ac = [NSKeyedUnarchiver unarchiveObjectWithFile:@"ac.txt"]; 87 [ac print]; 88 //如果目的文件已存在,则拷贝失败。解决方案 :先判断目的文件是否存在 然后删除目的文件,再进行拷贝 89 90 /* 91 92 BOOL y1 = [fmfileExistsAtPath:@"a.txt"]; 93 BOOL y2 = [fmfileExistsAtPath:@"ac.txt"]; 94 if (!y1 || y2) { 95 if(!y1) 96 { 97 //创建源文件 98 } 99 else 100 { 101 //删除目的文件 102 } 103 } 104 */ 105 } 106 return 0; 107 }</font>
----------------------Student.h---------------------------
1 #import <Foundation/Foundation.h> 2 @interface Student : NSObject 3 { 4 NSString* name; 5 int age; 6 } 7 @property(nonatomic,retain)NSString* name; 8 @property(nonatomic,assign)int age; 9 -(id)initWithName:(NSString*)_name andAge:(int)_age; 10 -(void)print; 11 @end
----------------------Student.m---------------------------
1 <font size="3">#import "Student.h" 2 @implementation Student 3 @synthesize name,age; 4 - (id)initWithCoder:(NSCoder *)aDecoder 5 { 6 if(self = [super init]){ 7 self.name = [aDecoder decodeObjectForKey:@"NAME"];//键必须与编码时指定的键一致。 8 self.age = [[aDecoder decodeObjectForKey:@"AGE"] intValue]; 9 } 10 return self; 11 } 12 -(id)initWithName:(NSString*)_name andAge:(int)_age 13 { 14 if (self = [super init]) { 15 self.name = _name; 16 self.age = _age; 17 } 18 return self; 19 } 20 //将本类对象进行编码(二进制) 21 -(void)encodeWithCoder:(NSCoder*) aCoder 22 { 23 //编码 对对象进行编码:本质就是对对象的实例变量进行编码。 24 [aCoder encodeObject:self.name forKey:@"NAME"];//键值编码 25 [aCoder encodeObject:[NSNumber numberWithInt:self.age] forKey:@"AGE"]; 26 } 27 -(void)print 28 { 29 NSLog(@"name%@ age:%d",name,age); 30 } 31 -(void)dealloc 32 { 33 [name release]; 34 [super dealloc]; 35 } 36 @end 37 </font>
标签:
原文地址:http://www.cnblogs.com/cai1432452416/p/5311585.html