您的位置:首页 > 移动开发 > IOS开发

iOS开发之文件管理

2014-06-03 19:20 351 查看
在项目开发中,经常会用到文件管理。在这里对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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: