iOS激情详解之文件夹创建,移动,复制,删除以及归档和反归档
2015-09-18 22:50
645 查看
<span style="font-size:18px;">主要代码精髓:</span> #import "RootViewController.h" #import “DXModel.h" #define kDocumentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] #define kCachesPath [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] @interface RootViewController () @end @implementation RootViewController - (void)viewDidLoad { [super viewDidLoad]; [self createFile]; [self moveFile]; [self copyFile]; [self deleteFile]; [self isExistFild]; [self unArchive]; [self unArchive]; }
// 创建一个文件夹 ******************************** - (void)createFile { // 需求 在documents下创建一个download文件夹 NSArray *documentsArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentPath = documentsArr[0]; // 拼接路径 NSString *downloadPath = [documentPath stringByAppendingPathComponent:@"Download"]; // 创建文件夹 // 文件管理者 这个类是个单例类 用来对文件进行操作 NSFileManager *manager = [NSFileManager defaultManager]; // withIntermediateDirectories; 如果你YES的情况下,要创建的文件存在的话可以对其进行覆盖,反之情况,文件存在的话不能对其覆盖(创建失败) BOOL isCreatFile = [manager createDirectoryAtPath:downloadPath withIntermediateDirectories:YES attributes:nil error:nil]; NSLog(@"%d", isCreatFile); }
// 移动文件夹 ******************************** - (void)moveFile { // 获取原来路径 定义一个宏 NSString *oldPath = [kDocumentPath stringByAppendingPathComponent:@"Download"]; // 获取新路径 library 下的Caches 文件夹 再定义一个宏 NSString *newPath = [kDocumentPath stringByAppendingPathComponent:@"Download"]; // 创建文件管理者类的对象(单例对象) NSFileManager *manager = [NSFileManager defaultManager]; // 移动文件夹 BOOL isMoved = [manager moveItemAtPath:oldPath toPath:newPath error:nil]; // NSLog(@"%@", lesson) NSLog(@"%d", isMoved); }
// 复制文件夹 ******************************** - (void)copyFile { // library 下的Caches文件夹 download 复制到document文件夹下 NSString *oldPath = [kCachesPath stringByAppendingPathComponent:@"download"]; NSString *newPath = [kDocumentPath stringByAppendingPathComponent:@"download"]; // 创建文件管理对象 NSFileManager *manager = [NSFileManager defaultManager]; //复制 BOOL isCopy = [manager copyItemAtPath:newPath toPath:oldPath error:nil]; NSLog(@"%d", isCopy); NSLog(@"%@", newPath); }
// 删除文件夹 ******************************** - (void)deleteFile { // 获取要删除的路径 NSString *deletePath = [kDocumentPath stringByAppendingPathComponent:@"Download"]; // 创建文件管理对象 NSFileManager *manager = [NSFileManager defaultManager]; // 删除 BOOL isDelete = [manager removeItemAtPath:deletePath error:nil]; NSLog(@"%d", isDelete); }
// 判断一个文件是否存在 ******************************** - (void)isExistFild { NSString *path = [kCachesPath stringByAppendingPathComponent:@"Download"]; // 创建文件管理对象 NSFileManager *manager = [NSFileManager defaultManager]; BOOL isExist = [manager isExecutableFileAtPath:path]; NSLog(@"%d", isExist);
// 复杂对象归档 - (void)archive { // 归档前需要初始化对象 DXModel *model = [[DXModel alloc] init]; // 赋值对象 model.name = @“DX"; model.age = 19; // 这里可以设置个图片转成data // 把一个png格式的转化成data格式 model.data = UIImagePNGRepresentation([UIImage imageNamed:@"bg_nav"]); // 创建一个可变的data 初始化归档对象 NSMutableData *data = [NSMutableData data]; // 创建一个归档对象 需要一个可变的就在上面创建一个 NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data]; // 进行归档编码 [archiver encodeObject:model forKey:@"DXModel"]; // 编码完成 [archiver finishEncoding]; // 实际上归档 相当于把编码完的对象,保存到data中 NSLog(@"%@",data); //把存有复杂对象的data写入文件中 进行持久化 // 1,搞路径 NSString *dataPath = [kDocumentPath stringByAppendingPathComponent:@"DXModel.da"]; // 2,调写入方法 BOOL is = [data writeToFile:dataPath atomically:YES]; // 释放对象 [archiver release];<pre name="code" class="objc">#import “DXModel.h" @implementation DXModel - (void)dealloc { [_name release]; [_data release]; [super dealloc]; } // 对复杂对象进行持久化 叫做 归档与反归档(编码与解码) // 归档方法:编码成可以持久化的格式 - (void)encodeWithCoder:(NSCoder *)aCoder { // 对每一个属性都要进行编码 // 注意:属性的类型 [aCoder encodeObject:self.name forKey:@"name"]; // 除了对象类型,其他类型,其他方法都有特殊的编码方法 [aCoder encodeInteger:self.age forKey:@"age"]; [aCoder encodeObject:self.data forKey:@"data"]; } // 反归档 - (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; if (self) { // 解码过程 // 跟编码一样 除了对象类型以外 也是有特殊解码方法 // 注意:编码的时候给的key 要和 解码的key一样 self.name = [aDecoder decodeObjectForKey:@"name"]; self.age = [aDecoder decodeIntegerForKey:@"age"]; self.data = [aDecoder decodeObjectForKey:@"data"]; } return self; } @end
#import “DXModel.h" @implementation DXModel - (void)dealloc { [_name release]; [_data release]; [super dealloc]; } // 对复杂对象进行持久化 叫做 归档与反归档(编码与解码) // 归档方法:编码成可以持久化的格式 - (void)encodeWithCoder:(NSCoder *)aCoder { // 对每一个属性都要进行编码 // 注意:属性的类型 [aCoder encodeObject:self.name forKey:@"name"]; // 除了对象类型,其他类型,其他方法都有特殊的编码方法 [aCoder encodeInteger:self.age forKey:@"age"]; [aCoder encodeObject:self.data forKey:@"data"]; } // 反归档 - (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; if (self) { // 解码过程 // 跟编码一样 除了对象类型以外 也是有特殊解码方法 // 注意:编码的时候给的key 要和 解码的key一样 self.name = [aDecoder decodeObjectForKey:@"name"]; self.age = [aDecoder decodeIntegerForKey:@"age"]; self.data = [aDecoder decodeObjectForKey:@"data"]; } return self; } @end
}// 反归档解码过程:给他一个data,给咱一个model- (void)unArchive{ // data路径 NSString *dataPath = [kDocumentPath stringByAppendingPathComponent:@"DXModel.da"]; // 获取刚才归档的对象 NSData *data = [NSData dataWithContentsOfFile:dataPath]; // 创建 反归档对象 NSKeyedUnarchiver *unarchive = [[NSKeyedUnarchiver
alloc] initForReadingWithData:data]; // 解码返回一个对象 // 这个Forkey一定要和刚才归档的时候一样 DXModel *model = [unarchive decodeObjectForKey:@"DXModel"]; // 反归档完成 [unarchive finishDecoding]; // 释放反归档对象 [unarchive release]; NSLog(@"-----%@", model.name); UIImage *image = [UIImage
imageWithData:model.data]; NSLog(@"------%@",image);}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
#import <Foundation/Foundation.h> // 复杂对象需要进行持久化 需要遵守一个协议<NSCoding> @interface DXModel : NSObject<NSCoding> @property (nonatomic, retain)NSString *name; @property (nonatomic, assign)NSInteger age; @property (nonatomic, retain)NSData *data; @end
#import “DXModel.h" @implementation DXModel - (void)dealloc { [_name release]; [_data release]; [super dealloc]; } // 对复杂对象进行持久化 叫做 归档与反归档(编码与解码) // 归档方法:编码成可以持久化的格式 - (void)encodeWithCoder:(NSCoder *)aCoder { // 对每一个属性都要进行编码 // 注意:属性的类型 [aCoder encodeObject:self.name forKey:@"name"]; // 除了对象类型,其他类型,其他方法都有特殊的编码方法 [aCoder encodeInteger:self.age forKey:@"age"]; [aCoder encodeObject:self.data forKey:@"data"]; } // 反归档 - (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; if (self) { // 解码过程 // 跟编码一样 除了对象类型以外 也是有特殊解码方法 // 注意:编码的时候给的key 要和 解码的key一样 self.name = [aDecoder decodeObjectForKey:@"name"]; self.age = [aDecoder decodeIntegerForKey:@"age"]; self.data = [aDecoder decodeObjectForKey:@"data"]; } return self; } @end
相关文章推荐
- 汉字转换成拼音封装
- iOS视频播放Demo VideoPlayerDemo
- 程序间的通信
- iOS开发学习之实现瀑布流
- 一张图告诉你iPhone设备、iOS系统版本、屏幕分辨率的演变
- IOS巅峰之图片异步下载
- **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)
- iOS9适配Tip
- **iOS开发系列--IOS程序开发概览
- ios之json,xml解析
- iOS开发~CocoaPods使用详细说明
- iOS开发-方法调用在运行时的过程
- iOS9 添加定位功能后,启动应用没有出现允许开启定位权限的通知,或者出现权限通知后,自动消失的解决办法 - 家柱
- iOS 核心动画-关键帧动画
- iOS 核心动画 -基础动画
- iOS 核心动画-锚点
- iOS 动画
- ios-新浪微博开发-(使用AFN三方库出现的错误总结)
- iOS数据请求之post异步同步
- 欢迎使用CSDN-markdown编辑器