沙盒下主要有四个文件夹:
document,
caches,
tmp,
library
Object-c
document 的路径 程序运行时生成的文件,这个文件不要存比较放大的文件,比如音频,视频类,因为这里的东西会被上传
caches 的路径 一般用于文件的下载,存储(不会被上传)
tmp 临时文件.程序结束后应该清空
沙盒文件夹路径获取:
获取沙盒路径:
1 NSString *sandBoxPath = NSHomeDirectory();
获取 document :
1 NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
获取 caches 路径:
1 NSString *cacherPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
获取 tmp 路径:
1 NSString *tmpPath = NSTemporaryDirectory();
在沙盒下创建文件:
1.获取路径
2.拼接文件名(包括后缀)
3.将内容写到文件
例:写一个 txt 文件:
1 //NSString 写入
2
3 NSString *str = @"二傻子";
4
5 //获取 document 路径
6 NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
7
8 //拼接上一个 txt 文件
9 NSString *filePath = [docPath stringByAppendingPathComponent:@"coco.txt"];
10
11 //吧字符串写到 txt 文件
12 [str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
例:写一个 array 文件:
1 //NSArray
2
3 NSArray *array = @[@"二傻子",@"三傻子",@"翠花",@"叶良岑",@"赵日天",@"王尼玛"];
4
5 NSString *tmpPath1 = NSTemporaryDirectory();
6
7 NSString *tmpFilePath = [tmpPath1 stringByAppendingPathComponent:@"tmp.plist"];
8
9 [array writeToFile:tmpFilePath atomically:YES];
例:写一个 dictionary 文件:
1 NSDictionary *dic = @{@"1号":@"XXXXX",@"2号":@"XXXXX",@"3号":@"XXXXX",@"4号":@"XXXXX",@"5号":@"XXXXX"};
2
3 NSString *dicPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
4 NSString *dicFilePath = [dicPath stringByAppendingPathComponent:@"dic.plist"];
5
6 [dic writeToFile:dicFilePath atomically:YES];
例:写一个 image 文件:
1 NSString *cacherPath2 = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
2
3 NSString *imgFilePath = [cacherPath2 stringByAppendingPathComponent:@"123.png"];
4
5 NSData *data = [[NSData alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"1" ofType:@"png"]];
6
7 [data writeToFile:imgFilePath atomically:YES];
Swift
1,Home目录, ./ , 整个应用程序各文档所在的目录
//获取程序的Home目录
let homeDirectory = NSHomeDirectory()
2,Documnets目录 ./Documents
用户文档目录,苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
//方法1
let documentPaths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,
NSSearchPathDomainMask.UserDomainMask, true)
let documnetPath = documentPaths[0] as! String
//方法2
let ducumentPath2 = NSHomeDirectory() + "/Documents"
3,Library目录 ./Library
这个目录下有两个子目录:Caches 和 Preferences
Library/Preferences目录,包含应用程序的偏好设置文件。不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好。
Library/Caches目录,主要存放缓存文件,iTunes不会备份此目录,此目录下文件不会再应用退出时删除
//Library目录-方法1
let libraryPaths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.LibraryDirectory,
NSSearchPathDomainMask.UserDomainMask, true)
let libraryPath = libraryPaths[0] as! String
//Library目录-方法2
let libraryPath2 = NSHomeDirectory() + "/Library"
//Cache目录-方法1
let cachePaths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory,
NSSearchPathDomainMask.UserDomainMask, true)
let cachePath = cachePaths[0] as! String
//Cache目录-方法2
let cachePath2 = NSHomeDirectory() + "/Library/Caches"
``
4,tmp目录 ./tmp
用于存放临时文件,保存应用程序再次启动过程中不需要的信息,重启后清空。
let tmpDir = NSTemporaryDirectory()
//方法2
let tmpDir2 = NSHomeDirectory() + "/tmp"
5,程序打包安装的目录 NSBundle.mainBundle()
工程打包安装后会在NSBundle.mainBundle()路径下,该路径是只读的,不允许修改。
所以当我们工程中有一个SQLite数据库要使用,在程序启动时,我们可以把该路径下的数据库拷贝一份到Documents路径下,以后整个工程都将操作Documents路径下的数据库。
//声明一个Documents下的路径
var dbPath = NSHomeDirectory() = "/Documents/hanggeDB.sqlite"
//判断数据库文件是否存在
if !NSFileManager.defaultManager().fileExistsAtPath(dbPath){
//获取安装包内数据库路径
var bundleDBPath:String? = NSBundle.mainBundle().pathForResource("hanggeDB", ofType: "sqlite")
//将安装包内数据库拷贝到Documents目录下
NSFileManager.defaultManager().copyItemAtPath(bundleDBPath!, toPath: dbPath, error: nil)
}