原文链接:http://www.jianshu.com/p/349855b5a8ae
iOS APP 可以在自己的沙盒里读写文件,但是,不可以访问其他 APP 的沙盒。每一个 APP 都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过 URL Scheme。沙盒里面的文件可以是照片、声音文件、文本、属性列表等。 —— 由膜法小编分享

沙盒机制

iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒。每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme。沙盒里面的文件可以是照片、声音文件、文本、属性列表等。

沙河盒根目录的结构
  • Documents:用于存储用户数据,iTunes备份和恢复的时候会包含此目录。所以,苹果建议将程序中建立的或在程序中浏览到的数据保存在该目录下
  • Library
    • Caches :Caches用来存放用户需要换成的文件
    • Preferences :Preferences是APP的偏好设置,可以通过NSUserDefaults来读取和设置
  • tmp:用于存放临时文件,这个可以放一些当APP退出后不再需要的文件。

62317-e49c692cb5d9ebb3.png

路径获取
1、获取沙盒根目录
NSString *directory = NSHomeDirectory();NSLog(@"directory:%@", directory);

打印结果

directory:/Users/jiangjunuhi/Library/Developer/CoreSimulator/Devices/66637C61-6E6B-4564-88A0-203CA75FDC83/data/Containers/Data/Application/09AB2635-9FAA-4B5A-A7BE-1ADF25391A03
2、获取Documents路径

参数的意义:

21BD09BC-4F15-4FDD-AF3E-A5D3FA2EF2BB.png

 /*第一个参数:指定了搜索的路径的名称:NSDocumentDirectory 表示是在Documents中寻找。NSCacheDirectory的话就是在cache文件中寻找第二个参数:第二个参数限定了文件的检索范围只在沙箱内部.其意义为用户电脑主目录.也可以修改为网络主机等第三个参数:最后一个参数决定了是否展开波浪线符号.展开后才是完整路径,这个布尔值一直为YES.*/NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSLog(@"paths.count:%ld",paths.count);for (NSInteger i = 0; i < paths.count; i++) {NSString *path = paths[i];NSLog(@"path:%@",path);}

打印结果:

0C469A95-2A42-41C4-AA77-2EB6D97917E2.png

打印的路径

path:/Users/jiangjunuhi/Library/Developer/CoreSimulator/Devices/66637C61-6E6B-4564-88A0-203CA75FDC83/data/Containers/Data/Application/3EAAAB22-F3B3-40E8-84BC-34380BBF0AC1/Documents
3、获取Library路径
 //获取Library路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);

打印结果

path:/Users/jiangjunuhi/Library/Developer/CoreSimulator/Devices/66637C61-6E6B-4564-88A0-203CA75FDC83/data/Containers/Data/Application/87028E4A-2AEC-4CEE-8743-DA087A41B3B7/Library
4、获取Caches路径
//获取Caches路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);

打印结果

path:/Users/jiangjunuhi/Library/Developer/CoreSimulator/Devices/66637C61-6E6B-4564-88A0-203CA75FDC83/data/Containers/Data/Application/5C10AF1E-9B02-4A72-93A2-52CAC2C17326/Library/Caches
5、获取tmp路径
NSString *tmp = NSTemporaryDirectory();
NSLog(@"tmp:%@", tmp);

打印结果

tmp:/Users/jiangjunuhi/Library/Developer/CoreSimulator/Devices/66637C61-6E6B-4564-88A0-203CA75FDC83/data/Containers/Data/Application/B68EE6BA-BE71-4315-AEB5-3C84237BAB28/tmp/
打开沙盒方法

finder前往

屏幕快照 2017-04-12 上午11.11.28.png

直接在Finder->前往->前往文件夹,输入上面的内容即可

文件操作

NSFileManager:NSFileManager是用来管理文件系统的,它可以用来进行常见的文件\文件夹操作(拷贝、剪切、创建等)

NSFileManager使用了单例模式singleton
使用defaultManager方法可以获得那个单例对象
[NSFileManager defaultManager]

文件的增删改查
1、创建文件夹
 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsPath = [paths objectAtIndex:0];//创建文件夹的路径NSString *testPath = [documentsPath stringByAppendingPathComponent:@"test"];//创建目录NSFileManager *fileManager = [NSFileManager defaultManager];BOOL rest = [fileManager createDirectoryAtPath:testPath withIntermediateDirectories:YES attributes:nil error:nil];if (rest) {NSLog(@"文件夹创建成功:%@",testPath);}else{NSLog(@"文件夹创建失败");}

打印结果

文件夹创建成功:/Users/jiangjunuhi/Library/Developer/CoreSimulator/Devices/66637C61-6E6B-4564-88A0-203CA75FDC83/data/Containers/Data/Application/FC2F96A3-A5A6-4BC9-A551-204F9F247F9D/Documents/test
2、创建文件
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsPath = [paths objectAtIndex:0];NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];NSFileManager *fileManager = [NSFileManager defaultManager];NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];BOOL res=[fileManager createFileAtPath:testPath contents:nil attributes:nil];if (res) {NSLog(@"文件创建成功: %@" ,testPath);}else{NSLog(@"文件创建失败");}

打印结果

文件创建成功: /Users/jiangjunuhi/Library/Developer/CoreSimulator/Devices/66637C61-6E6B-4564-88A0-203CA75FDC83/data/Containers/Data/Application/43303432-330A-4845-A674-F4B74FC81E67/Documents/test/test.txt
3、写数据到文件
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsPath = [paths objectAtIndex:0];NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];NSString *content=@"测试写入内容!";BOOL res=[content writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil];if (res) {NSLog(@"文件写入成功:%@",testPath);}elseNSLog(@"文件写入失败");
4、读文件数据
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsPath = [paths objectAtIndex:0];
NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];  NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];
//    NSData *data = [NSData dataWithContentsOfFile:testPath];
//    NSLog(@"文件读取成功: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);  NSString *content=[NSString stringWithContentsOfFile:testPath encoding:NSUTF8StringEncoding error:nil];  NSLog(@"文件读取成功: %@",content);
5、删除文件
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];  NSFileManager *fileManager = [NSFileManager defaultManager];  NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];     BOOL res=[fileManager removeItemAtPath:testPath error:nil];  if (res) {  NSLog(@"文件删除成功");  }else  NSLog(@"文件删除失败");     NSLog(@"文件是否存在: %@",[fileManager isExecutableFileAtPath:testPath]?@"YES":@"NO");
}
2、文件的一些常用方法
1、判断文件是否存在
 //创建文件管理对象//调用defaultManager 创建一个文件管理的单例对象//单例对象:在程序运行期间,只有一个对象存在NSFileManager *fm = [NSFileManager defaultManager];// YES 存在   NO 不存在BOOL isYES = [fm fileExistsAtPath:filePath];NSLog(@"-->%d",isYES);
2、判断是否是一个目录
if(isYES){BOOL isDir;// 2) 判断是否是一个目录[fm fileExistsAtPath:filePath isDirectory:&isDir];if (isDir) {NSLog(@"这是一个目录");}else{NSLog(@"这不是一个目录");}}
3、判断文件是否可读
[fm isReadableFileAtPath:filePath];
4、是否可写
[fm isWritableFileAtPath:filePath2];
5、是否可删除
[fm isDeletableFileAtPath:filePath2];
6、获取文件的信息(属性)
//创建文件对象NSFileManager *fm = [NSFileManager defaultManager];NSString *filePath = @"/Users/zhaoxiaohu/Desktop/arr.plist";NSString *dirPath = @"/Users/zhaoxiaohu/Desktop/a";//1)如何获取文件的信息(属性)NSDictionary *dict = [fm attributesOfItemAtPath:filePath error:nil];NSLog(@"%@",dict);NSLog(@"%@,%@",[dict objectForKey:@"NSFileOwnerAccountName"],dict[@"NSFileOwnerAccountName"]);
7、copy文件
 //如何copy文件NSString *targetPath = @"/Users/zhaoxiaohu/Desktop/aaa/ccc/love.txt";[fm copyItemAtPath:createDirPath toPath:targetPath error:nil];NSString *targetPath = @"/Users/zhaoxiaohu/Desktop/aaa/love.txt";
8、移动文件
 [fm moveItemAtPath:createDirPath toPath:targetPath error:nil];

iOS 开发之沙盒机制 文件操作 (NSFielManager)相关推荐

  1. iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据

    iOS开发:沙盒机制以及利用沙盒存储字符串.数组.字典等数据 1.初识沙盒:(1).存储在内存中的数据,程序关闭,内存释放,数据就会丢失,这种数据是临时的.要想数据永久保存,将数据保存成文件,存储到程 ...

  2. iOS开发之沙盒机制(SandBox)

    iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme.沙盒里面的文件可以是照片.声音文件. ...

  3. (0051)iOS开发之沙盒(sandbox)机制和文件操作(一)

    1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...

  4. macOS - Cocoa开发之沙盒机制及访问Sandbox之外的文件

    原文地址:http://www.skyfox.org/cocoa-macos-sandbox.html iOS默认并且只能读写对应的沙盒目录. OSX自从10.6系统开始引入沙盒机制,规定发布到Mac ...

  5. ios沙箱软件_iOS 开发之沙盒机制

    1.iOS 沙盒机制简介 沙盒也叫沙箱,英文standbox,其原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中.在沙盒机制下,每个程序之间的文件夹不能互相访问.iOS系统为了保证系统安 ...

  6. iOS开发 清空沙盒路径下的缓存数据

    引言: 移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为 SDWebImage . 但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯. ...

  7. (0052)iOS开发之沙盒(sandbox)机制和文件操作(二)

    我们看看如何获取应用程序沙盒目录.包括真机的沙盒的目录. 1.获取程序的Home目录 NSString *homeDirectory = NSHomeDirectory(); NSLog(@" ...

  8. android 沙盒 ios,iOS中的沙盒机制

    1.应用沙盒结构分析: 应用程序包:(图中的Layer)包含了所有的资源文件和可执行文件 Documents: 保存应用运行时生成的需要出持久化的数据,iTunes同步设备会备份该目录.例如,游戏应用 ...

  9. (0053)iOS开发之沙盒(sandbox)机制和文件操作(三)

    1.在Documents里创建目录 创建一个叫test的目录,先找到Documents的目录, NSArray *paths = NSSearchPathForDirectoriesInDomains ...

最新文章

  1. 标定(二)----------双目相机与IMU联合标定(工具箱使用方法——Kalibr)
  2. mysql 时间日期类型 datetime、timestamp、date、time、year
  3. PowerDesigner的数据类型
  4. 准备好做个硬核科技青年了么?| 【2019科技创新者大会】限时免费报名中
  5. 2.3.4 mysql 用户密码管理
  6. 关于I2C和SPI总线协议
  7. 使用CloudForms实现云运营幸福感的3个步骤
  8. 服务器能进系统滴滴响,ibm x226服务器开机嘀嘀嘀响三遍就没反应了。是怎么回事?内存吗?...
  9. SLIC超像素分割详解(一)(二)(三)
  10. iso安装器_mac怎么装双系统|mac电脑安装双系统教程
  11. SQLyog使用技巧
  12. 搜狗 语音输入法 linux,搜狗输入法Linux1.0企业版发布 全面提升用户输入体验
  13. 网站被黑、被入侵该如何解决?
  14. 你有反馈,我们安排!Sketch 插件升级,新老对比一图看懂
  15. 德州扑克算法幕后研发者CMU博士Brown专访:AI如何打败顶级人类牌手?
  16. 水星路由器wan口ip显示0_路由器wan口状态全是0 路由器wan口状态ip为0-192路由网
  17. 程序设计思维与实践 Week15 作业 A-ZJM与霍格沃兹
  18. 小程序毕设作品之微信积分商城小程序毕业设计成品(5)任务书
  19. 肖然:DDD分层架构的代码结构实战
  20. TMF、NGOSS介绍

热门文章

  1. php 类中的变量的定义
  2. 设计模式笔记之十四 (命令模式)
  3. 设计中涉及到的dip、dp、px、sp等单位说明
  4. Martin Fowler对全世界程序员的建议
  5. Redis客户端JetCache的单机版和集群版的配置
  6. php fsockopen解决办法
  7. linux mysql 命令 大全
  8. 好多Javascript日期选择器呀-7
  9. GDB调试--以汇编语言为例
  10. 一种注册表沙箱的思路、实现