如何将数组/字典中的数据保存到plist文件中

以前总觉得将内容写入文件是多么高大上的功能,在iOS里面,其实只需要一个关键方法

1
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

即可实现该功能。

如何写文件

该方法其实是NSArray和NSDictionary的实例方法,新手尝尝遇到的问题就是虽然用到了上述方法,但是最终写入文件失败了,失败的原因大多数就是:

  • 要写入内容的文件是否存在(若不存在需要调用-[NSFileManager createFileAtPath:contents:attributes:]来创建文件)
  • 要写入内容的文件已存在,但是文件路径写错了

废话不多说,附上我测试code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
- (void)writeToFile
{
NSDictionary *dict = @{@"A":@[@"1",@"2",@"3"],
@"B":@[@"4",@"5",@"6"],
@"C":@[@"7",@"8",@"9"]};
NSArray *array = @[@"A",@"B",@"C",@"D",@"E",@"F",@"G"];
//把数据保存到沙盒里的plist文件
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *plistPath = [paths objectAtIndex:0];
NSLog(@"%@",plistPath);
//得到完整的路径名
NSString *fileName1 = [plistPath stringByAppendingPathComponent:@"test1.plist"];
NSString *fileName2 = [plistPath stringByAppendingPathComponent:@"test2.plist"];
NSFileManager *fm = [NSFileManager defaultManager];
if ([fm createFileAtPath:fileName1 contents:nil attributes:nil]) {
[array writeToFile:fileName1 atomically:YES];
NSLog(@"文件1写入完成");
}
if ([fm createFileAtPath:fileName2 contents:nil attributes:nil]) {
[dict writeToFile:fileName2 atomically:YES];
NSLog(@"文件2写入完成");
}
}

## 如何读文件
首先需要知道你写入文件的数据的类型是什么,是字符串,一个数组,一个字典还是NSData,知道了这些,我们就可以用相应的类方法 xxxWithContentsOfFile: 来获取文件内容。

// 从文件中读取字符串,txtPath为字符串文件路径
NSString *resultStr = [NSString stringWithContentsOfFile:txtPath encoding:NSUTF8StringEncoding error:nil];

// 从文件中读取数据数组的方法,filePath为数组文件路径
NSArray *resultArr = [NSArray arrayWithContentsOfFile:filePath];

// 从文件中读取数据字典的方法,fileDicPath为字典文件路径
NSDictionary *resultDic = [NSDictionary dictionaryWithContentsOfFile:fileDicPath];

// 从文件读取存储的NSData数据,fileDataPath为数据文件路径
NSData *resultData = [NSData dataWithContentsOfFile:fileDataPath];

扩展资料

Jackson wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
如果你觉得我的文章还不错,欢迎打赏~