一、iOS沙盒机制
每个app都有自己的沙盒目录,iOS应用程序只能对自己创建的文件进行读写操作,包括图片、音视频、plist文件、sqlite等资源文件。
- 每个应用程序都有自己独立的存储空间(沙盒目录)
- 一般程序之间不可相互访问
模拟器沙盒位置
/Users/lihuaguang/Library/Developer/CoreSimulator/Devices/3DAC7BC1-CDCB-457E-B1E0-0AE3883F306E/data/Containers/Data/Application/6EA22853-82E5-450D-884B-7112C2F846E
这个目录包含三个子目录,分别是Document、Library和tmp
- Document:一般持久数据都放在此目录,可以在当中添加子目录和文件,iTunes备份和恢复时,会包含此目录。
- Library:设置程序默认设置和其他信息,NSUserDefaults保存的数据就保存在此目录。
- tmp:创建临时文件目录,当iOS设备重启时,文件会被自动清除。
获取沙盒目录
// 根目录(home)目录
NSString *homePath = NSHomeDirectory();
// Document目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [paths lastObject];
// Library目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryPath = [paths lastObject];
// Library中的Cache
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths lastObject];
// temp路径
NSString *temp = NSTemporaryDirectory();
二、文件路径(NSString)
// 获得此路径的各个组成部分
NSArray *components = [docPath pathComponents];
// 提取路径的最后一个组成部分
NSString *filePath = [docPath lastPathComponent];
// 删除路径的最后一个组成部分
NSString *path1 = [docPath stringByDeletingLastPathComponent];
// 获取制定文件目录
NSString *path2 = [docPath stringByAppendingPathComponent:@"test.plist"];
// 获取除去扩展名的路径
NSString *path3 = [path2 stringByDeletingPathExtension];
// 获取路径扩展名
NSString *path4 = [path2 pathExtension];
// 路径最后部分追加扩展名
NSString *path5 = [path3 stringByAppendingPathExtension:@"jpg"];
三、文件管理常用方法(NSFileManager)
// 判断文件是否存在
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:filePath]) {
}
// 文件不存在,则创建
BOOL isCreate = [fileManager createFileAtPath:filePath contents:nil attributes:nil];
// 获取文件数据
NSData *fileData = [fileManager contentsAtPath:path1];
// 写入文件
BOOL isCreate = [fileManager createFileAtPath:filePath contents:data attributes:nil];
BOOL isSave = [dataArr writeToFile:filePath atomically:YES];
// 移动文件
BOOL isMove = [fileManager moveItemAtPath:fromPath toPath:toPath error:nil];
// 拷贝文件
BOOL isCopy = [fileManager copyItemAtPath:fromPath toPath:toPath error:nil];
// 删除文件
BOOL isDelete = [fileManager removeItemAtPath:path error:nil];
// 比较文件内容是否一致
BOOL isSame = [fileManager contentsEqualAtPath:path1 andPath:path2];
// 获取文件大小
NSDictionary *attrDic = [fileManager attributesOfItemAtpath:sourcePath error:nil];
NSNumber *fileSize = [attrDic objectForKey:NSFileSize];