iOS开发 文件路径保存

OS文件本地化处理要经过三个步骤,获得文件保存路径、根据文件的属性选择对应的存档方式,存档读档的实现。

一、获得文件保存路径

1."应用程序包": 这里面存放的是应用程序的源文件,包括资源文件和可执行文件。

NSString *path = [[NSBundle mainBundle] bundlePath];

2.Documents: 最常用的目录,iTunes同步该应用时会同步此文件夹中的内容,适合存储重要数据。

NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;

3.Library/Caches: iTunes不会同步此文件夹,适合存储体积大,不需要备份的非重要数据。

NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;

4.tmp: iTunes不会同步此文件夹,系统可能在应用没运行时就删除该目录下的文件,所以此目录适合保存应用中的一些临时文件,用完就删除。

NSString *path = NSTemporaryDirectory();

5.Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

二:不同的文件属性需要有不同的文件保存处理方式

1.plist文件一般保存的文件格式

NSArray;

NSMutableArray;

NSDictionary;

NSMutableDictionary;

NSData;

NSMutableData;

NSString;

NSMutableString;

NSNumber;

NSDate;

(1)获取文件保存路径

(2)保存

[array writeToFile:fileName atomically:YES];

(3)读取

NSArray *result = [NSArray arrayWithContentsOfFile:fileName];

( 4 )注意

只有以上列出的类型才能使用plist文件存储。

存储时使用writeToFile: atomically:方法。 其中atomically表示是否需要先写入一个辅助文件,再把辅助文件拷贝到目标文件地址。这是更安全的写入文件方法,一般都写YES。

读取时使用arrayWithContentsOfFile:方法。

2.Preference 配置文件

(1)获得NSUserDefaults文件

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

(2)向文件中写入内容

[userDefaults setObject:@"AAA"forKey:@"a"];

注:[userDefaults setObject:值 forKey:关键词]

(3)同步到配置文件里

[userDefaults synchronize];

(4)读取文件

NSString *name = [userDefaults objectForKey:@“a”]; //读取配置文件中为“a”的值

BOOL sex = [userDefaults boolForKey:@"sex"];

注: 要使用对应的对象类型来读取 配置文件中的值,且需要用对应的方法。

(5)注意

偏好设置是专门用来保存应用程序的配置信息的,一般不要在偏好设置中保存其他数据。

如果没有调用synchronize方法,系统会根据I/O情况不定时刻地保存到文件中。所以如果需要立即写入文件的就必须调用synchronize方法。

偏好设置会将所有数据保存到同一个文件中。即preference目录下的一个以此应用包名来命名的plist文件。

3.NSKeyedArchiver 归档

归档在iOS中是另一种形式的序列化,只要遵循了NSCoding协议的对象都可以通过它实现序列化。由于决大多数支持存储数据的Foundation和Cocoa Touch类都遵循了NSCoding协议,因此,对于大多数类来说,归档相对而言还是比较容易实现的。

(1)在需要归档的对象里遵守NSCoding协议,并且使用对应的方法

在.h文件里面遵守 NSCoding 协议

@interface Person : NSObject

在.m文件里实现 NSCoding 协议的方法

//归档

- (void)encodeWithCoder:(NSCoder *)aCoder {

[aCoder encodeObject:self.avatar forKey:@"avatar"];

[aCoder encodeObject:self.nameforKey:@"name"];

[aCoder encodeInteger:self.age forKey:@"age"];

}

//解档

- (id)initWithCoder:(NSCoder *)aDecoder {

if([superinit]) {

self.avatar = [aDecoder decodeObjectForKey:@"avatar"];

self.name= [aDecoder decodeObjectForKey:@"name"];

self.age = [aDecoder decodeIntegerForKey:@"age"];

}

returnself;

}

注: 要归档子类,必须在实现[super encodeObject:aCoder];[super initWithCoder:aDecoder];方法

(2)使用:

存档使用NSKeyedArchiver中的archiveRootObject: toFile:方法

// 1.创建文件路径

NSString *file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"person.data"];

// 2.存档到文件目录下

[NSKeyedArchiver archiveRootObject:person toFile:file];

读档需要使用NSKeyedUnarchiver 中的  unarchiveObjectWithFile: 方法

// 1.创建文件路径

NSString *file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"person.data"];

// 2.读取文件目录下的文件

Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:file];

(3)注意

必须遵循并实现NSCoding协议

保存文件的扩展名可以任意指定

继承时必须先调用父类的归档解档方法

时间: 2024-11-06 10:34:24

iOS开发 文件路径保存的相关文章

IOS 开发文件操作——NSFileManager

转自:http://blog.csdn.net/xyz_lmn/article/details/8968213,留着方便查阅 iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录.               上

iOS开发中如何保存按钮的状态

在iOS开发中我们经常会需要保存某个按钮的状态,比如很多设置选项中的UISwitch按钮的开关,比如一些按钮的选中与否等等,今天项目中有一个需求是要保存自动登录按钮的选中状态,想要实现这个功能,可以用归档来完成. 首先需求图: 我需要记录自动登录按钮的状态,若用户选择了下次自动登录,那么程序退出再次启动这个按钮仍然是选中状态. 首先,我们需要监听按钮的点击事件,因为在点击事件里面我们能够拿到按钮的状态. 通过下面代码,存储选中状态. - (IBAction)autologinClick:(UIB

thinkphp表单上传文件并将文件路径保存到数据库中

上传单个文件,此文以上传图片为例,上传效果如图所示 创建数据库upload_img,用于保存上传路径 CREATE TABLE `seminar_upload_img` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `img_name` varchar(255) DEFAULT NULL COMMENT '图片名称',  `img_url` varchar(255) DEFAULT NULL COMMENT '图片路径',  `create_time` te

ios开发学习路径

1.第一点要求 ,能比较顺畅的阅读官方的文档 如果你连官方的文档读起来都非常困难,那你还谈什么提高和进阶,咱们学习iOS的所有权威的资料都来自apple开发者网站,靠逛论坛看看帖子不是出路. 如果这点没达到,那就从阅读官方文档开始吧,找一篇你比较熟悉的技术的官方文档,比如:View Programming Guide for iOS  自己阅读,翻译,里面不懂的单词,记下来,多学几遍,这些你不懂的单词,在以后你看其他时文档里还会出现无数次的.坚持几个月后,你会发现,英文的文档,看起来比中文的顺眼

iOS开发学习路径的一些建议

iOS论坛里有朋友要求回答帖子,帖子的标题是: 想学IOS开发高阶一点的东西,从何开始,然后我吧啦吧啦回答写了很多.既然敲了那么多字,我就把我写的回复也贴到博客里来分享,希望能对大家有帮助.欢迎大家也到帖子里讨论和分享,地址:http://bbs.csdn.net/topics/390920759 下面是我回复的内容: 结合自己情况聊下iOS学习建议,这里不讲大道理,说说具体怎么做.欢迎大家拍砖 1.第一点要求 ,能比较顺畅的阅读官方的文档. 如果你连官方的文档读起来都非常困难,那你还谈什么提高

iOS开发 - 检测路径下文件夹是否存在

NSFileManager *fileManager = [NSFileManager defaultManager]; NSArray *homePath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *libraryPath = [homePath objectAtIndex:0]; NSString *tempPath = [libraryPath str

iOS开发-文件操作

目录操作和文件管理 学习目标 1.理解单例 2.掌握NSFileManager类常用的文件管理操 3.掌握NSFileHandle类常用的文件数据操作 4.了解NSData类的常用操作 5.掌握Plist文件读写 ---------------------- 通常程序在运行中或者程序结束之后,需要保存一些信息,而且需要持久化存储信息,比如登陆信息.视频播放记录.收藏记录等等,那么我们可以采用以下几种方式对数据进行持久化保存. 1.1单例模式(当前对象有且仅有一个实例) 好处:只有一个实例,数据共

iOS开发中——如何保存用户敏感信息(用户名和密码等信息)

使用Keychain存储用户敏感信息 iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储.相对于NSUserDefaults.文件保存等一般方式,keychain保存更为安全,而且keychain里保存的信息不会因App被删除而丢失,所以在重装App后,keychain里的数据还能使用.从ios 3.0开始,跨程序分享keychain变得可行. 如何需要在应用里使用使用keyChain,我们需要导入Securi

Android开发 - 文件、保存状态和首选项

一个Activity至少应当在进入不活动状态前保存它的用户界面(UI)状态. Activity生命周期 创建并保存Shared Preference Shared Preference是一种简单的.轻量级的名称/值对(NVP)机制,用于保存原始应用程序数据. 使用SharedPreference类可以创建名称/值对的命名映射,它们可以在会话之间持久化,并在同一个应用程序沙箱中运行的应用程序组件之间共享(但是对其他应用程序不可用). 为了创建或者修改一个Shared Preference,可以调用