沙盒与文件管理
1、沙盒:
———内部文件夹框架:
/沙盒/Doucuments 用于存放非隐秘文件(可由程序写入,系统不会自动回收)
/沙盒/library/cashes 缓存文件(可由程序写入,系统会不定期回收)
/沙盒/library/Preference 不能由程序写入
/沙盒/tmp 用于存放临时文件(可由程序写入,系统会不定期回收)
2、文件管理(NSFileManager)
用manager检查文件是否存在,并创建一个新的文件
NSString *filePath = [NSString stringWithFormat:@"%@/Documents/test1.txt",NSHomeDirectory()];
NSLog(@"filePath:%@",filePath);
NSFileManager *manager = [NSFileManager defaultManager];
if([manager fileExistsAtPath:filePath] == NO){
[manager createFileAtPath:filePath contents:nil attributes:nil];
}
一个文件可读、可写、可执行,可删除的判断
[manager isReadableFileAtPath:filePath];//可读
[manager isWritableFileAtPath:filePath];//可写
[manager isExecutableFileAtPath:filePath];//可执行
[manager isDeletableFileAtPath:filePath];//可删除
查看文件属性
NSDictionary *filePro = [manager attributesOfItemAtPath:filePath error:nil];
NSLog(@"%@",filePro);
输入结果为一个属性的字典
NSFileCreationDate = "2015-09-11 12:55:27 +0000";
NSFileExtensionHidden = 0;
NSFileGroupOwnerAccountID = 20;
NSFileGroupOwnerAccountName = staff;
NSFileModificationDate = "2015-09-11 12:55:27 +0000";
NSFileOwnerAccountID = 501;
NSFilePosixPermissions = 420;
NSFileReferenceCount = 1;
NSFileSize = 179;
NSFileSystemFileNumber = 3461272;
NSFileSystemNumber = 16777218;
NSFileType = NSFileTypeRegular;
文件的复制,移动,删除
[manager copyItemAtPath:filePath toPath:filePath1 error:nil]; //复制
[manager moveItemAtPath:filePath toPath:filePath1 error:nil]; //移动
[manager removeItemAtPath:filePath error:nil]; //删除
3、文件读写(NSFileHandle)
从新浪网上读出主页数据写入指定的文件中
下载网页内容,存于data中
NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.sina.com"]];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"error:%@",error);
}else{
NSLog(@"response:%@",response);
[self writeToFileWithData:data];
}
}];
[dataTask resume];
writeToFileWithData:的实现如下:
- (void)writeToFileWithData:(NSData *)data{
//open file by updating mode(read and write mode)
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:_filePath];
//creat a data and write to file
[fileHandle writeData:data];
//close file
[fileHandle closeFile];
}
此处是以读写方式打开,此外还有可以只读方式打开,只写方式打开
打开文件,如下图,与预期相同:
向指定的位置读写文件:
基于上面的代码所生成的这个文件,先直接进行写入”hello world”
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:_filePath];
NSData *data = [@"hello world" dataUsingEncoding:NSUTF8StringEncoding];
[fileHandle writeData:data];
结果如下:
直接覆盖了前面的11个字符
如果想要向指定点读写可用:
[fileHandle seekToFileOffset:100];
这是将光标移动到100处,如果再调用writeData时,就是从100处开始读写内容
此外还有其他常用的方法
将光标移动到文件末尾
[fileHandle seekToEndOfFile];
将文件延长或剪切到指定长度
[fileHandle truncateFileAtOffset:50];
从当前光标开始读取指定长度的数据
NSData *data = [fileHandle readDataOfLength:20];
从当前光标开始读取数据直到文件末尾
NSData *data = [fileHandle readDataOfLength:20];