我们知道,苹果上的应用程序都是运行在自己的沙盒中的,很少也没有足够的权限跟沙盒外面的文件资源打交道,一般一个应用的文件目录如下:
想要获得应用目录下的文件夹路径最常用的操作:
NSFileManager类的URLsForDirectory:inDomains: 实例方法允许你在IOS的文件系统中搜索指定的目录,特别是在你应用的沙箱中.此方法有两个参数:
URLsForDirectory:
此参数是你将要搜索的字典对象.为此参数传递一个NSSearchPath类型的目录字典.我将在稍后详细讨论此参数.
inDomains:
此参数指定你在哪儿搜索给定的目录.此参数必须是一NSSearchDomainMask的枚举值.
假设你要获得你应用的 Document 文件夹路径,你会发现是如此简单:NSFileManager *fileManager = [[NSFileManager alloc] init]; NSArray *urls = [fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; if ([urls count] > 0) { NSURL *documentsFolder = urls[0]; NSLog(@"%@",documentsFolder); }else{ NSLog(@"Could not find the Documents folder"); }
URLsForDirectory
NSLibraryDirectory 标记应用的library文件夹.
NSCachesDirectory 标记caches文件夹,在之前解释说明过.
NSDocumentDirectory 标记document文件夹.
inDomains
NSUserDomainMask 标记对文件夹路径的搜索在当前用户文件夹下进行.在OS X中,此文件夹为~/.
如果你想获得 tmp 文件夹的路径,请像这样使用 C 函数 NSTemporaryDirectory( );
NSString *tempDirectory = NSTemporaryDirectory(); NSLog(@"Temp Directory = %@",tempDirectory);
//写 -(BOOL)writeText:(NSString *)paramText toPath:(NSString *)paramPath{ return [paramText writeToFile:paramPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; }
//读 -(NSString *)readTextFromPath:(NSString *)paramPath{ return [[NSString alloc] initWithContentsOfFile:paramPath encoding:NSUTF8StringEncoding error:nil]; }
- (void)viewDidLoad { [super viewDidLoad]; NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"MyFile.txt"]; if ([self writeText:@"Hello,World!" toPath:filePath]) { NSString *readText = [self readTextFromPath:filePath]; if ([readText length]) { NSLog(@"Text read from disk = %@",readText); }else{ NSLog(@"Failed to read the text from disk"); } }else{ NSLog(@"Failed to write the file"); } }
NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"MyFile.txt"]; NSArray *arrayOfNames = @[@"Steve",@"John",@"Aaron"]; if ([arrayOfNames writeToFile:filePath atomically:YES]) { NSArray *readArray = [[NSArray alloc] initWithContentsOfFile:filePath]; if ([readArray count]) { NSLog(@"Read the array back from disk just fine"); }else{ NSLog(@"Failed to read the array back from disk"); } }else{ NSLog(@"Failed to save the array to disk"); }
NSArray类的实例方法writeToFile:atomiclly只能保存包含如下对象类型的数组:
NSString
NSDictionary
NSArray
NSData
NSNumber
NSDate
如果你试图在数组中插入其他的对象,则数据将无法被保存到磁盘。
字典具有和数组类似的进行数据写磁盘及读数据回字典对象的方式.方法名称也完全 相同,且数组的保存规则同样适用于字典
NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"MyFile.txt"]; NSDictionary *dict = @{@"firstName": @"Aaron", @"lastName":@"zheng", @"age":@"21"}; if ([dict writeToFile:filePath atomically:YES]) { NSDictionary *readDictionary = [[NSDictionary alloc] initWithContentsOfFile:filePath]; if ([readDictionary isEqualToDictionary:dict]) { NSLog(@"The file we read is the same one as the one we saved"); }else{ NSLog(@"Failed to read the dictionary from disk"); } }else{ NSLog(@"Failed to write the dictionay to disk"); }
//在磁盘中创建一个文件夹 -(void)createDirectory{ NSFileManager *fileManager = [[NSFileManager alloc] init]; NSString *tempDir = NSTemporaryDirectory(); NSString *path = [tempDir stringByAppendingPathComponent:@"images"]; NSError *error; if ([fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error]) { NSLog(@"Successfully created the directory"); }else{ NSLog(@"Failed to create the directory , ERROR = %@",error); } }
//删除文件及文件夹 -(void)removeDir{ NSFileManager *fileManager = [[NSFileManager alloc] init]; NSString *tempDir = NSTemporaryDirectory(); NSString *path = [tempDir stringByAppendingString:@"images"]; NSError *error; if([fileManager removeItemAtPath:path error:&error] == NO){ NSLog(@"Failed to remove path %@, ERROR = %@",path,error); } }
好了,就先写到这里吧,,不想写了,有时间在写写关于磁盘中文件的安全处理,附注:文中的示例都是摘自《ios 6 Programming Cookbook》一书,由DevDiv网友自发组织翻译,支持技术和信息的共享!