当前位置: 首页 > 编程日记 > 正文

iOS 开发之沙盒机制 文件操作 (NSFielManager)


原文链接: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];

相关文章:

手动部署OpenStack环境(一:Virtual Box 5.1 环境的安装及配置)

任务一、Virtual Box 5.1 环境的安装及配置 1.1、安装环境检查 1.2、创建安装目录 1.3、安装及配置 实验目的及要求 完成Virtual box平台安装&#xff0c;会应用相关操作&#xff1b;在virtual box虚拟平台上部署网络节点Network&#xff1b;在virtual box虚拟平台上部署计算…

iOS动画系列之九:实现点赞的动画及播放起伏指示器

iOS动画系列&#xff0c;共十篇。现在写到第九篇啦。感兴趣的可以通过下面的传输门进到其他几篇文章里面。 第一篇&#xff1a;iOS动画系列之一&#xff1a;通过实战学习CALayer和透视的原理。做一个带时分秒指针的时钟动画(上) 第二篇&#xff1a;iOS动画系列之二&#xff1a;…

MySql5.7环境搭建

1. 安装mysql的linux系统 [rootgrewan ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [rootgrewan ~]# uname -a Linux grewan 2.6.32-573.26.1.el6.x86_64 #1 SMP Wed May 4 00:57:44 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux [rootgrewan ~]# 注意&#xff1a;l…

Toad 修改起始窗口

Toad默认窗口时Editor&#xff0c; 如果想要修改为Schema Browser可以通过以下步骤进行修改&#xff08;以Toad9.6为例&#xff09;&#xff1a; 1&#xff0c;点击菜单栏上的View下拉菜单 2&#xff0c;选择Toad Options...菜单 3&#xff0c;在打开窗口的左边功能列表中找到并…

手动部署OpenStack环境(二:CentOS6.6虚拟机的安装及配置)

任务二、CentOS 6.6虚拟机的安装及配置 2.1、安装环境检查 2.2、安装及配置controller0节点 2.3、安装及配置computer0节点 2.4、安装及配置network0节点 2.5、对各节点进行基础配置及服务安装 任务二&#xff1a;CentOS6.6虚拟机的安装及配置 2.1、安装环境检查 2.1.1在…

练习-----查询

第一步&#xff1a;建表 1 create table student #学生表2 (3 Sno varchar(20) primary key, #学号&#xff0c;主键4 Sname varchar(20) not null, #学生姓名5 Ssex varchar(20) not null, #学生性别6 Sbirthday datetime, #学生出生日期7 Class …

UIActivityViewController使用

苹果从iOS6开始&#xff0c;提供了一个活动列表视图&#xff0c;为分享和操作数据提供了一个统一的服务接口&#xff0c;通过UIActivityViewController来控制它的呈现和关闭&#xff0c;凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。如下图所示&#xff1a; 活…

SQL Server系统表sysobjects介绍与使用

关于SQL Server数据库的一切信息都保存在它的系统表格里。我怀疑你是否花过比较多的时间来检查系统表格&#xff0c;因为你总是忙于用户表格。但是&#xff0c;你可能需要偶尔做一点不同寻常的事&#xff0c;例如数据库所有的触发器。你可以一个一个地检查表格&#xff0c;但是…

手动部署OpenStack环境(三:OpenStack环境预配置)

任务三、OpenStack环境预配置 3.1、本地OpenStack yum源制作 任务三&#xff1a;OpenStack环境预配置 3.1、本地OpenStack yum 源制作 3.1.1、拷贝镜像文件源到本地 3.1.2、查看createrepo是否安装&#xff0c;并使用yum方法安装。 &#xff08;此操作只在controller0主机进…

Java 集合框架(二)—— ArrayList

二、数组列表 —— ArrayList 1、构造方法 ArrayList 是 Java 中的动态数组&#xff0c;底层实现就是对象数组&#xff0c;只不过数组的容量会根据情况来改变。 它有个带 int 类型参数的构造方法&#xff0c;根据传入的参数&#xff0c;扩展初始化的数组容量&#xff0c;这个方…

Linux X Window System运行原理和启动过程

本文主要说明X Window System的基本运行原理&#xff0c;其启动过程&#xff0c;及常见的跨网络运行X Window System。 一) 基本运行原理 X Window System采用C/S结构&#xff0c;但和我们常见的C/S不同。常见的C/S结构中&#xff0c;称提供服务的一方为server&#xff0c;即服…

悬浮球 / 悬浮按钮 / 辅助按钮

原文链接&#xff1a;https://github.com/jinht/FloatingBall类似于 iOS 系统自带的 AssistiveTouch / 京东 / 聚划算 / 建行等的辅助按钮 —— 由anticipate_91分享FloatingBall Function Description 这是一个类似于iOS系统自带的AssistiveTouch/京东《我的》部分的悬浮按钮等…

手动部署OpenStack环境(四:安装控制器必备软件)

任务四、安装控制器必备组件 4.1、安装MySQL服务&#xff08;controller0&#xff09; 4.2、安装Rabbitmq消息队列&#xff08;controller0&#xff09; 4.3、Keystone认证&#xff08;controller0&#xff09; 4.4、glance的安装与配置&#xff08;controller0&#xff09; 4.…

cocoaPods安装、更新第三方库

pod install 换成 pod install --verbose --no-repo-update pod update 换成 pod update --verbose --no-repo-update这是因为&#xff1a;目前&#xff0c;cocoaPods正在被墙中......转载于:https://www.cnblogs.com/hello-Huashan/p/5542456.html

iOS 性能优化总结

原文链接&#xff1a;https://github.com/skyming/iOS-Performance-Optimization关于 iOS 性能优化梳理&#xff1a; 基本工具、业务优化、内存优化、卡顿优化、布局优化、电量优化、 安装包瘦身、启动优化、网络优化等 —— 由_skyming_分享关于iOS 性能优化梳理&#xff1a; …

TCP/IP协议分析

一;前言 学习过TCP/IP协议的人多有一种感觉&#xff0c;这东西太抽象了&#xff0c;没有什么数据实例&#xff0c;看完不久就忘了。本文将介绍一种直观的学习方法&#xff0c;利用协议分析工具学习TCP/IP&#xff0c;在学习的过程中能直观的看到数据的具体传输过程。 为了初学者…

手动部署OpenStack环境(五:新建网络及部署虚拟机)

任务五、新建网络及部署虚拟机 5.1、配置安全组规则 5.2、新建网络 5.3、创建云主机 任务五、新建网络及部署虚拟机 5.1、配置安全组规则 5.1.1、配置安全组&#xff1b; 5.2、新建网络。 5.2.1、创建外部网络&#xff1b; 5.2.2、网络地址为外部网络连接的子网地址&#xff1b…

C++基础day01 程序设计方法的发展历程

类把属性和方法作了封装&#xff01; 总结&#xff1a; 面向过程程序设计&#xff1a;数据结构 算法 主要解决科学计算问题&#xff0c;用户需求简单而固定 特点&#xff1a; 分析解决问题所需要的步骤 利用函数实现各个步骤 依次调用函数解决问题 问题&#xff1a; 软件可重用…

【android】android中activity的生命周期

activity生命周期&#xff1a; 实例代码&#xff1a; 1 public class DemoActivity extends Activity {2 3 //1、activity第一次被创建的时候&#xff0c;执行4 Override5 public void onCreate(Bundle savedInstanceState) {6 super.onCreate(savedIn…

Xcode消除编译器警告

Whenever&#xff0c;Xcode警告对于我们来说都相当重要&#xff0c;提醒我们可能存在的错误。但是有时候&#xff0c;我们知道一切都好&#xff0c;everything is in the palm of my hand&#xff0c;我们想要消除那些警告。自己项目的警告 比如我们定义一个designated initial…

手动部署OpenStack环境(六:出现的问题与解决方案总结)

排错一&#xff1a;keystone服务安装中demo用户表单没信息。 排错思路&#xff1a; 组件安装是否有问题&#xff1b;用户创建畲缶有问题&#xff1b;用户认证信息是否合适&#xff1b;原因&#xff1a;用户的认证信息配置错误。 解决方案&#xff1a; a)删除有关demo用户的所有…

一劳永逸,iOS 自定义 ActionSheet 封装流程

原文链接&#xff1a;http://www.jianshu.com/p/cfb87a7db7b1本文为 iOS 自定义视图封装《一劳永逸》系列的第四期&#xff0c;旨在提供封装思路&#xff0c;结果固然重要&#xff0c;但理解过程才最好。授人以鱼不如授人以渔。 —— 由卖报的小画家Sure分享前言 本文为iOS自定…

cocoapods更新

使用sudo gem install cocoapods更新提示&#xff1a; ERROR: While executing gem ... (Errno::EPERM) Operation not permitted 改为&#xff1a;sudo gem install -n /usr/local/bin cocoapods --pre刷刷刷完成更新。但是马上发下更新后使用pod install又发现一个问题 The …

创建对象_工厂方法(Factory Method)模式 与 静态工厂方法

工厂方法模式&#xff1a; 定义&#xff1a;为创建对象定义一个接口&#xff0c;让子类决定实例化哪个类。工厂方法让一个类的实例化延迟至子类。应用场景&#xff1a;客户类不关心使用哪个具体类&#xff0c;只关心该接口所提供的功能&#xff1b;创建过程比较复杂&#xff0c…

数据通信技术(一:IP划分)

一、某公司生产部有50人&#xff0c;销售部有100人&#xff0c;财务部有25人&#xff0c;客服部有12人&#xff0c;没个员工配置一台主机&#xff0c;该公司有192.168.100.1/24的网段可用&#xff0c;应该如何划分子网。 销售部&#xff08;100&#xff09;台&#xff1a;/25 …

团队作业—第二阶段06

站立会议&#xff1a; 继续数据库的连接编程。 任务进度&#xff1a; 实现数据的输出。 站立会议照片&#xff1a; 任务看板&#xff1a; 燃尽图&#xff1a; 转载于:https://www.cnblogs.com/cpljlgs/p/5546157.html

Fade 数字切换动效

原文链接&#xff1a;http://www.jianshu.com/p/983674e6f4ef根据原型高度还原的一个动效作品。希望可以通过审核。谢谢。 —— 由Bear1494735376123分享欢迎同样喜爱动效的你加入 iOS动效特攻队–>QQ群&#xff1a;547897182 iOS动效特攻队–>熊熊&#xff1a;64807025…

fieldset 使用小案例

有初学者问到如何做出如下页面: 对应的代码如下: <fieldset><legend>★审核状态</legend><input name"state" type"radio" class"input1" value"1" />已审核<input name"state" type"radio…

数据通信技术(二:交换机配置管理)

交换机配置与管理&#xff08;思科模拟器&#xff09; 1.从用户模式进入特权模式,并进入配置模式设置进入特权模式的密码; 2.进入交换机的端口模式并进行端口状态的设置; 用新密码登录并查看接口状态信息,重启交换机;4.硬件和软件版本查询: 5.设备CPU的利用率: 6.检查设备的MA…

iOS之各种区别

作者 APP叫我取个帅气的昵称 关注 2017.05.15 10:47* 字数 140 阅读 1273评论 7喜欢 51写在前面&#xff1a;本文持续更新&#xff0c;也欢迎简友提供更多的关于iOS&#xff08;包括swift&#xff09;中的区别 1. _ _block和 _ _weak修饰符的区别的&#xff1a; (1). _ _block不…