iOS中的文件管理是基于沙盒机制的,沙盒其实就是系统给每个程序分配的一个文件夹,每个程序只能访问自己的沙盒,不能越界访问,所以说iOS系统相对来说是比较安全的,,怎样找到模拟器中的沙盒呢?
查找沙盒路径
1.~/Library
2./User/用户名/Library
3. 因为资源库文件夹是隐藏的,可以通过命令行 来让所有隐藏的文件显示
defaults write com.apple.finder AppleShowAllFiles -bool true
defaults write com.apple.finder AppleShowAllFiles -bool false
在新版的系统中沙盒的路径发生了变化,我们这里只说一下新版的沙盒目录,下面我们来看一下沙盒的目录结构:
来看一下获取方法:
- (void)sandBoxTest{
//获取根目录
NSString *homePath = NSHomeDirectory();
NSLog(@"Home目录:%@",homePath);
//获取Documents文件夹目录,第一个参数是说明获取Doucments文件夹目录,第二个参数说明是在当前应用沙盒中获取,所有应用沙盒目录组成一个数组结构的数据存放
//Documents 保存程序中自己创建的文件(程序中浏览的数据)
NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsPath = [docPath objectAtIndex:0];
NSLog(@"Documents目录:%@",documentsPath);
//获取Cache目录
//caches 存放缓存文件 重启iPhone时不会被清除
NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [cacPath objectAtIndex:0];
NSLog(@"Cache目录:%@",cachePath);
//Library目录
NSArray *libsPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libPath = [libsPath objectAtIndex:0];
NSLog(@"Library目录:%@",libPath);
//temp目录
//temporary 临时的 存放临时文件 重启时系统会把此文件清空
NSString *tempPath = NSTemporaryDirectory();
NSLog(@"temp目录:%@",tempPath);
//写入preferences的时候才会出现preferences目录
//preferences 存放userdefaults 生成的文件(偏好设置)
}
这几个是我们经常操作的沙盒目录下的文件夹,下面我们看一下一般的目录操作,本来Document目录下是不存在Test目录的,我们来创建一个
- (void)fileManagerTest{
// 文件管理者
// 单例类
NSFileManager *fileManager = [NSFileManager defaultManager];
// 创建一个文件夹
// Directory 目录
[fileManager createDirectoryAtPath:[self createPath] withIntermediateDirectories:YES attributes:nil error:nil];
// fileExistsAtPath 可以用来判断文件夹 或者文件是否存在某个路径下
if (![fileManager fileExistsAtPath:[[self createPath] stringByAppendingPathComponent:@"aaaa.plist"]]){
// 创建一个文件
[fileManager createFileAtPath:[[self createPath] stringByAppendingPathComponent:@"aaaa.plist"] contents:nil attributes:nil];
}
// 创建临时路径
NSString *tmp = [NSTemporaryDirectory() stringByAppendingPathComponent:@"aaaa.plist"];
// 移动文件到指定路径
[fileManager moveItemAtPath:[[self createPath] stringByAppendingPathComponent:@"aaaa.plist"] toPath:tmp error:nil];
// 删除某个路径下的文件
[fileManager removeItemAtPath:tmp error:nil];
}
- (NSString *)createPath{
// 获得documents的目录
NSString *documentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
// 拼接一个新的路径
NSString *newPath = [documentsPath stringByAppendingPathComponent:@"Test"];
return newPath;
}
来看一下执行后的效果:
这里介绍了两种获取路径的方法,以后可能会常用
//第一种
NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsPath = [docPath objectAtIndex:0];
NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [cacPath objectAtIndex:0];
//Library目录
NSArray *libsPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
//第二种
NSString *documentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString *pathSting = [NSString stringWithFormat:@"%@/Documents",homePath];