==========================

文件操作

==========================

一、归档NSKeyedArchiver

1.第一种方式:存储一种数据。

// 归档

// 第一种写法

// 对象--文件

NSArray* array = [[NSArray alloc]initWithObjects:@"zhang", @"wang", @"li", nil];

NSString* filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"array.txt"];

BOOL success = [NSKeyedArchiver archiveRootObject:array toFile:filePath];

if (success) {

NSLog(@"保存成功");

}

// 解归档

NSArray* arr = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

NSLog(@"%@",arr);

2.第二种方式:存储并行数据(存储多种数据)。

//  第二种写法:

NSArray* array = @[@"one", @"two", @"three"];

NSDictionary* dic = @{@"key":@"value"};

NSString* str = @"我是中国人,我爱中国";

// NSData 数据流类

// 用来存储复杂的数据,把复杂的数据转成数据流格式,可以方便进行存储和传输。

// 例如:图片、大文件

// 断点续传,假如图片有20M大,

// 发邮件:添加附件

NSMutableData* data = [[NSMutableData alloc]init];

// initForWritingWithMutableData 指定要写入的数据流文件

NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

// 编码数据,参数一:要准备编码的数据;参数二:编码数据的key,key随便写

[archiver encodeObject:array forKey:@"array"];

[archiver encodeObject:dic forKey:@"dic"];

[archiver encodeObject:str forKey:@"str"];

// 编码完成

[archiver finishEncoding];

// 指定文件路径

NSString* filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"file2"];

// 写入文件

[data writeToFile:filePath atomically:YES];

// =======================================

// 下部分

// 先把路径下的文件读入数据流中

NSMutableData* fileData = [[NSMutableData alloc]initWithContentsOfFile:filePath];

// 把数据流文件读入到了 解归档中

NSKeyedUnarchiver* unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:fileData];

// 进行解归档

NSArray* UnArray = [unArchiver decodeObjectForKey:@"array"];

NSDictionary* UnDic = [unArchiver decodeObjectForKey:@"dic"];

NSString* UnStr = [unArchiver decodeObjectForKey:@"str"];

// 打印

NSLog(@"%@\n%@\n%@\n",UnArray,UnDic,UnStr);

3.第三种归档方式:对类对象进行归档

1.先在类的头文件中实现<NSCoding>协议

2.在.m中重新编码和解码协议。

// 重新initWithCoder 解码方法

- (id) initWithCoder: (NSCoder *)aDecoder

{

NSLog(@"我是解码方法,我负责解码");

self = [super init];

if (self) {

_name = [aDecoder decodeObjectForKey:@"name"];

_phone = [aDecoder decodeObjectForKey:@"phone"];

_address = [aDecoder decodeObjectForKey:@"address"];

}

return  self;

}

//重新编码方法

- (void) encodeWithCoder: (NSCoder *)aCoder

{

[aCoder encodeObject:_name forKey:@"name"];

[aCoder encodeObject:_phone forKey:@"phone"];

[aCoder encodeObject:_address forKey:@"address"];

}

//【注】forKey:是字符串;编码方法和解码方法字符串要一致

二、NSFileManager 文件管理类

1.1、文件路径

// 根路径

NSString* homePath = NSHomeDirectory();

NSLog(@"%@",homePath);

oc中有三个目录是可以操作的。

1.Documents // 文稿目录

2.tmp // 临时目录:程序退出的时候,临时目录内容可能会被情况

3.library--->Cache // 缓存目录 // app目录下

// 获取Documents  目录

// 写法一

NSString* Documents = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

NSLog(@"Documents :%@",Documents);

// 写法二

NSString* Documents1 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDirectory, YES) objectAtIndex:0];

NSLog(@"Documents : %@",Documents1);

// 获取应用程序的主目录

NSString* userName = NSUserName();

NSString* rootPath = NSHomeDirectoryForUser(userName);

NSLog(@"app root path:%@",rootPath);

// 获取cache目录

NSString* cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];

NSLog(@"cache :%@",cachePath);

// 获取tmp目录

NSString* tmpPath = NSTemporaryDirectory();

NSLog(@"tmp:%@",tmpPath);

1.2、创建目录和文件

// 获取根目录

NSString* homePath = NSHomeDirectory();

// 创建了一个文件管理器

NSFileManager* fileMgr = [NSFileManager defaultManager];

// 拼接出想要创建的文件路径

NSString* filePath = [NSString stringWithFormat:@"%@/myFolder",homePath];

// 创建文件目录

// 第一个参数传入想要创建的文件目录,第二个参数指导是否创建不存在的文件夹,yes代表创建

BOOL isOk = [fileMgr createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];

if (isOk) {

NSLog(@"创建文件目录成功");

}

NSString* string = @"我爱记歌词";

// 把内容写入到指定路径下的指定文件中

BOOL isWriteOk = [string writeToFile:[NSString stringWithFormat:@"%@/1.txt",filePath] atomically:YES encoding:NSUTF8StringEncoding error:nil];

if (isWriteOk) {

NSLog(@"写入文件成功");

}

// 数组保存

NSArray* array = @[@"我是一", @"我是三", @"我是周7"];

BOOL isWriteOK1 = [array writeToFile:[NSString stringWithFormat:@"%@/2.txt",filePath] atomically:YES];

if (isWriteOK1) {

NSLog(@"数组写入文件成功");

}

// 字典保存

NSDictionary* dic = @{@"key":@"value"};

BOOL isWriteOK2 = [dic writeToFile:[NSString stringWithFormat:@"%@/3.txt",filePath] atomically:YES];

if (isWriteOK2) {

NSLog(@"字典写入文件成功");

}

2.对文件进行重命名

// 获取根目录

NSString* homePath = NSHomeDirectory();

// 创建了一个文件管理器

NSFileManager* fileMgr = [NSFileManager defaultManager];

// 拼接出想要创建的文件路径

NSString* filePath = [NSString stringWithFormat:@"%@/myFolder/1.txt",homePath];

[fileMgr moveItemAtPath:filePath toPath:[NSString stringWithFormat:@"%@/ai.txt",homePath] error:nil];

3.删除一个文件

// 声明了一个错误信息的对象

NSError* error;

// 获取根目录

NSString* homePath = NSHomeDirectory();

// 创建了一个文件管理器

NSFileManager* fileMgr = [NSFileManager defaultManager];

// 拼接出想要创建的文件路径

NSString* filePath = [NSString stringWithFormat:@"%@/myFolder/3.txt",homePath];

// 删除文件

// 如果方法执行返回是NO,error会保存错误信息,如果方法执行返回是YES,error = nil

BOOL isok = [fileMgr removeItemAtPath:filePath error:&error];

if (isok) {

NSLog(@"删除文件成功");

}

else

{

NSLog(@"删除文件失败");

// 打印错误信息

NSLog(@"%@",error.localizedDescription);

}

Δ【扩展】NSError类,是一个错误信息类

// 删除文件

// 如果方法执行返回是NO,error会保存错误信息,如果方法执行返回是YES,error = nil

BOOL isok = [fileMgr removeItemAtPath:filePath error:&error];

∆4.删除目录下的所有文件

// 获取根目录

NSString* homePath = NSHomeDirectory();

// 创建了一个文件管理器

NSFileManager* fileMgr = [NSFileManager defaultManager];

// 拼接出想要创建的文件路径

NSString* filePath = [NSString stringWithFormat:@"%@/myFolder/3.txt",homePath];

// 如果删除的目录中不带具体的文件,则删除的是整个目录

[fileMgr removeItemAtPath:[NSString stringWithFormat:@"%@/myFolder/",homePath] error:nil];

5.获取目录下的所有文件

// 获取根目录

NSString* homePath = NSHomeDirectory();

// 创建了一个文件管理器

NSFileManager* fileMgr = [NSFileManager defaultManager];

// 拼接出想要创建的文件路径

NSString* filePath = [NSString stringWithFormat:@"%@/myFolder/",homePath];

// 获取当前目录下的所有文件,包括隐藏文件

NSArray* allFile = [fileMgr contentsOfDirectoryAtPath:filePath error:nil];

NSLog(@"%@",allFile);

// 获取当前目录以及子目录的所有文件

NSArray* subAllFile = [fileMgr subpathsOfDirectoryAtPath:filePath error:nil];

6.文件的属性

// 获取根目录

NSString* homePath = NSHomeDirectory();

// 创建了一个文件管理器

NSFileManager* fileMgr = [NSFileManager defaultManager];

// 拼接出想要创建的文件路径

NSString* filePath = [NSString stringWithFormat:@"%@/myFolder/3.txt",homePath];

NSDictionary* fileAttribute = [fileMgr fileAttributesAtPath:filePath traverseLink:YES];

// 获取文件的属性

NSData* data = [fileAttribute objectForKey:NSFileModificationDate];

NSLog(@"文件的创建日期:%@",data);

// 获取文件属性2(*)

NSDictionary* dic1 = [fileMgr attributesOfItemAtPath:filePath error:nil];

NSLog(@"属性打印 %@",dic1);

// 文件占多少字节

NSNumber * number = [fileAttribute objectForKey:NSFileSize];

NSLog(@"文件的大小:%@",number);

// 判断文件是否存在

NSFileManager *manager = [NSFileManager defaultManager];

BOOL isExist = [manager  fileExistsAtPath:filePath];

归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)的更多相关文章

  1. iOS:沙盒、偏好设置、归档、解归档

    一.沙盒和应用程序包 •iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被称为沙盒 •iOS常用目录: –Bundle –Documents –Library/Ca ...

  2. OBjective-C:文件管理类NSFileManager

    文件管理类NSFileManager类:对文件进行创建.复制.重命名.删除等,一般不对文件内容进行操作. NSData类和NSMutableData类:相当于数据缓冲区  NSFileManager是 ...

  3. UI进阶 文件管理器(NSFileManager)文件对接器(NSFileHandle)

    一.文件管理器与文件连接器之间的区别 文件管理器(NSFileManager) 此类主要是对文件进行的操作(创建/删除/改名等)以及文件信息的获取. 文件连接器(NSFileHandle) 此类主要是 ...

  4. Java 之 File类(文件操作)

    一.概述 java.io.File 类是文件和目录路径名册抽象表示,主要用于文件和目录的创建.查找和删除等操作. File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法. 路径问题: ...

  5. C#File类常用文件操作以及一个模拟的控制台文件管理系统

    重温一下C#中File类的一些基本操作: File类,是一个静态类,主要是来提供一些函数库用的. 使用时需要引入System.IO命名空间. 一.常用操作: 1.创建文件方法 //参数1:要创建的文件 ...

  6. Python基础6--函数、类和文件操作

    1 def name(para) def myabs(x): if x>0: return x else: return -x 2 lambda表达式 用于声明匿名函数,既没有名字的小函数 f ...

  7. iOS初级数据持久化 沙盒机制 归档与反归档

    数据持久化就是数据保存成文件,存储到程序中的沙盒中. 沙盒构成 Document 存储用户数据,需要备份的信息 Caches 缓存文件, 程序专用的支持文件 Temp 临时文件 通过代码查找程序沙盒的 ...

  8. iOS阶段学习第18天笔记(Plist-Archiver-归档与解归档操作)

    iOS学习(OC语言)知识点整理 一.归档与解归档的操作 1)归档是一个过程,将一个或多个对象存储起来,以便以后可以还原,包括将对象存入文件,以后再读取 将数据对象归档成plist文件 2)plist ...

  9. C++ 文件操作(CFile类)

    原文:文件操作(CFile),C吉羊 一.Visual C++编程文件操作 有如下方法可进行操作: (1)使用标准C运行库函数,包括fopen.fclose.fseek等. (2)使用Win16下的文 ...

随机推荐

  1. .NET开源进行时:消除误解、努力前行(本文首发于《程序员》2015第10A期的原始版本)

    2014年11月12日,ASP.NET之父.微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET ...

  2. ExtJS in Review - xtype vs. alias

    今天在帮一个兄弟检查一段自定义控件的代码时觉得他对xtype以及alias的使用和ExtJS各示例代码的使用有较多的不一致,而我自己也不是很清楚使用这两个属性时的最佳方法.因此在回家后整理出了这样一篇 ...

  3. 我写的一些前端开源项目(均托管到github)

    大部分项目都是平时项目用到的某些功能,觉得有趣或者复用性有点高就提取成一个单独项目来做维护 coffee-tmpl : 一个极简的模板引擎和ejs及underscore的template类似 turn ...

  4. AngularJs之六(服务)

    服务:AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用.AngularJS 内建了30 多个服务. 最常用的服务:$location  服务,  $http 服务 ...

  5. 浏览器HTTP缓存原理分析

    以前项目中遇到了很多浏览器缓存相关的问题,也在网上查过资料,搞过服务器的配置,来确保客户端加载服务器资源的速度和资源有效性.最近仔细看了下http协议中和缓存相关的一些属性,总结一下. 浏览器缓存原理 ...

  6. JavaScript 函数节流和函数去抖应用场景辨析

    概述 也是好久没更新 源码解读,看着房价蹭蹭暴涨,心里也是五味杂陈,对未来充满恐惧和迷茫 ...(敢问一句你们上岸了吗) 言归正传,今天要介绍的是 underscore 中两个重要的方法,函数节流和函 ...

  7. 连接SQLServer时,因启用连接池导致孤立事务的原因分析和解决办法

    本文出处:http://www.cnblogs.com/wy123/p/6110349.html 之前遇到过这么一种情况: 连接数据库的部分Session会出现不定时的阻塞,这种阻塞时长时短,有时候持 ...

  8. scikit-learn一般实例之七:使用多输出评估器进行人脸完成

    本例将展示使用多输出评估期来实现图像完成.目标是根据给出的上半部分人脸预测人脸的下半部分. 第一列展示的是真实的人脸,接下来的列分别展示了随机森林,K近邻,线性回归和岭回归对人脸下半部分的预测. # ...

  9. .net程序部署(setupFactory)

    vs 自带的安装打包 实在弱爆了,点都不好用.一直一直在寻觅一个靠谱点的打包工具.在网上寻寻觅觅 寻寻觅觅 功夫不负有心人,终于让我找到了.setupFactory  我用的是 8.0版本 . 首先要 ...

  10. PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库

    最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQ ...