iOS开发之文件管理
来源:互联网 发布:cf无后坐力软件 编辑:程序博客网 时间:2024/06/07 23:05
在项目开发中,经常会用到文件管理。在这里对iOS的文件管理做一小节。
首先,我们来看看iOS的沙盒机制
iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。每个应用程序都有自己的存储空间。而且一个应用程序无法访问到另一个应用程序存储空间中的内容。
当我们创建一个应用程序后,该应用程序的沙盒中会含有三个文件夹。分别为Document、Library和temp。
Document:程序中持久化的数据都会存放在此文件夹中。
Library:存储程序的默认设置或状态信息。
temp:创建临时文件的目录,当iOS设备重启时,文件会被自动清除。
一、文件路径
了解了沙盒中的文件后,我们来看看怎样获取这些文件的目录。
获取程序的根目录:NSString *homePath = NSHomeDirectory();
获取程序的Document目录:
NSArray *paths = NSSearchPathDorDirectoriesInDomains(NSDocumentDicrectory,, NSUserDomainMark, YES);
NSString *docPath = [paths lastObject];
获取程序的Library目录:
NSArray *paths = NSSearchPathForDirectoriseInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryPath = [paths lastObject];
获取程序的temp目录:
NSString *tempPath = NSTemporaryDirectory( );
二、路径的处理
文件路径的处理
NSString *path = @"/Uesrs/apple/testfile.txt"
获得组成此路径的各个组成部分,结果:("/","User","apple","testfile.txt")
- (NSArray *)pathComponents;
提取路径的最后一个组成部分,结果:testfile.txt
- (NSString *)lastPathComponent;
删除路径的最后一个组成部分,结果:/Users/apple
- (NSString *)stringByDeletingLastPathCpmponent;
将path添加到先邮路径的末尾,结果:/Users/apple/testfile.txt/app.txt
- (NSString *)stringByAppendingPathConmponent:(NSString *)str;
去路径最后部分的扩展名,结果:text
- (NSString *)pathExtension;
删除路径最后部分的扩展名,结果:/Users/apple/testfile
- (NSString *)stringByDeletingPathExtension;
路径最后部分追加扩展名,结果:/User/apple/testfile.txt.jpg
- (NSString *)stringByAppendingPathExtension:(NSString *)str;
三、文件管理常用方法
文件的读取:
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *docDir = [paths objectAtIndex:0];
- if (!docDir) {
- NSLog(@"Documents 目录未找到");
- }
- NSArray *array = [[NSArray alloc] initWithObjects:@"内容",@"content",nil];
- NSString *filePath = [docDir stringByAppendingPathComponent:@"testFile.txt"];
- [array writeToFile:filePath atomically:YES];
文件的写入:
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *docDir = [paths objectAtIndex:0];
- if (!docDir) {
- NSLog(@"Documents 目录未找到");
- }
- NSArray *array = [[NSArray alloc] initWithObjects:@"内容",@"content",nil];
- NSString *filePath = [docDir stringByAppendingPathComponent:@"testFile.txt"];
- [array writeToFile:filePath atomically:YES];
四、文件管理类-FileManager
fileManager是一个单例类,使用该类可以对文件进行一系列的操作,该类的创建主要目的是对文件操作的代码进行封装,以达到能够多次调用的目的。具体的实现方法如下:
1.FileManager.h中,主要定义了该类的公开接口,这些方法分别实现了一些功能
<span style="font-size:14px;">+ (id)loadObject:(NSString *)path;/*读取Documents文件下的序列化对象*/+ (NSMutableArray *)loadArray:(NSString *)path;/*读取Documents文件下的序列化非空数组*/+ (NSMutableDictionary *)loadDictionary:(NSString *)path;/*读取Documents文件下的序列化非空字典*/+ (BOOL)saveObject:(id)object filePath:(NSString *)path;/*将序列化对象存储至Documents下*/+ (BOOL)saveCacheObject:(id)object filePath:(NSString *)path;/*将序列化对象存储至Library/Caches文件夹下*/+ (BOOL)saveData:(NSData *)data filePath:(NSString *)path;/*将数据存储至Documents文件夹下*/+ (BOOL)fileExistsAtPath:(NSString *)path;/*Documents文件夹下是否存在指定文件*/+ (BOOL)createDirectoryAtPath:(NSString *)path;/*在Documents文件夹下创建指定路径文件夹*/+ (BOOL)deleteFile:(NSString *)path;/*删除Documents文件下指定文件*/</span>常用的文件操作的方法就是这些。下面就是这些方法的具体实现
2.FileManager.m
+ (id)loadObject:(NSString *)path{return [NSKeyedUnarchiver unarchiveObjectWithFile:path.documentFilePath];}+ (NSMutableArray *)loadArray:(NSString *)path{ NSMutableArray *tempArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path.documentFilePath]; if (!tempArray) { return [NSMutableArray array]; }return tempArray;}+ (NSMutableDictionary *)loadDictionary:(NSString *)path{ NSMutableDictionary *tempDictionary = [NSKeyedUnarchiver unarchiveObjectWithFile:path.documentFilePath]; if (!tempDictionary) { return [NSMutableDictionary dictionary]; }return tempDictionary;}+ (BOOL)saveObject:(id)object filePath:(NSString *)path{ if (!object || ![self createDirectoryAtPath:path]) { return NO; } NSString *filePath = path.documentFilePath; if ([object isKindOfClass:[UIImage class]]) { NSData *imageData = UIImageJPEGRepresentation((UIImage *)object, 1.0); return [imageData writeToFile:filePath atomically:NO]; } else { return [NSKeyedArchiver archiveRootObject:object toFile:filePath]; }}+ (BOOL)saveCacheObject:(id)object filePath:(NSString *)path{ if (!object || !path.length) { return NO; } NSString *filePath = path.cacheFilePath; NSString *directoryPath = [filePath substringToIndex:filePath.length - [(NSString *)filePath.pathComponents.lastObject length]]; NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath:directoryPath]) { return [fileManager createDirectoryAtPath:directoryPath withIntermediateDirectories:YES attributes:nil error:nil]; } if ([object isKindOfClass:[UIImage class]]) { NSData *imageData = UIImageJPEGRepresentation((UIImage *)object, 1.0); return [imageData writeToFile:filePath atomically:NO]; } else { return [NSKeyedArchiver archiveRootObject:object toFile:filePath]; }}+ (BOOL)saveData:(NSData *)data filePath:(NSString *)path{ if (!data || ![self createDirectoryAtPath:path]) { return NO; } return [data writeToFile:path.documentFilePath atomically:NO];}+ (BOOL)createDirectoryAtPath:(NSString *)path{ if (!path.length) { return NO; } NSString *filePath = path.documentFilePath; NSString *directoryPath = [filePath substringToIndex:filePath.length - [(NSString *)filePath.pathComponents.lastObject length]]; NSFileManager *fileManager = [NSFileManager defaultManager];if (![fileManager fileExistsAtPath:directoryPath]) {return [fileManager createDirectoryAtPath:directoryPath withIntermediateDirectories:YES attributes:nil error:nil];} return YES;}+ (BOOL)deleteFile:(NSString *)path{ NSString *filePath = path.documentFilePath; NSFileManager *fileManager = [NSFileManager defaultManager];if ([fileManager fileExistsAtPath:filePath]) {return [fileManager removeItemAtPath:filePath error:nil];}return NO;}+ (BOOL)fileExistsAtPath:(NSString *)path{ NSString *filePath = path.documentFilePath; NSFileManager *fileManager = [NSFileManager defaultManager];return [fileManager fileExistsAtPath:filePath];}
- iOS开发之文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- ios开发----文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- iOS之文件管理
- ios开发之使用bundle来管理资源文件
- ios开发之使用bundle来管理资源文件
- ios开发之使用bundle来管理资源文件
- 结婚个精光换句话黄金价格合计
- mongodb的环境搭建
- CSS布局:div高度随窗口变化而变化
- 线程间通信,生产者消费者问题!
- 迅雷2014校招编程题
- iOS开发之文件管理
- HDU 3651 A Simple Problem (DP 记忆化搜索 或者 bfs)
- 用CryptoAPI实现DES加密解密
- 单例模式
- Pascal's Triangle
- 判断一棵二叉查找树是否是平衡树
- java 反射
- 算法设计与分析基础学习一
- 条款26:尽可能延后变量定义式出现的时间