举例详解iOS开发过程中的沙盒机制与文件

所属分类: 软件编程 / IOS 阅读数: 855
收藏 0 赞 0 分享

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

  • 每个应用程序都有自己的存储空间
  • 应用程序不能翻过自己的围墙去访问别的存储空间的内容

打开模拟器沙盒目录
方法1、可以设置显示隐藏文件,然后在Finder下直接打开。设置查看隐藏文件的方法如下:打开终端,输入命名
<p class="p1">显示Mac隐藏文件的命令:

复制代码 代码如下:
defaults write com.apple.finder AppleShowAllFiles -bool true</p><p class="p1">

隐藏Mac隐藏文件的命令:
复制代码 代码如下:
defaults write com.apple.finder AppleShowAllFiles -bool false</p>

现在能看到资源库文件夹了。

打开资源库后找到/Application Support/iPhone Simulator/文件夹。这里面就是模拟器的各个程序的沙盒目录了。

方法2、这种方法更方便,在Finder上点->前往  然后按住"option"键,就会出现"资源库",其他同上

目录结构
默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。因为应用的沙盒机制,应用只能在几个目录下读写文件
Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
Library:存储程序的默认设置或其它状态信息;
Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
tmp:提供一个即时创建临时文件的地方。

iTunes在与iPhone同步时,备份所有的Documents和Library文件。
iPhone在重启时,会丢弃所有的tmp文件。
这是上面提到的三个目录 :Documents、Library、 tmp

几个常用的代码示例:
1、获取程序的Home目录 

复制代码 代码如下:

NSString *homeDirectory = NSHomeDirectory();   
NSLog(@"path:%@", homeDirectory);
  
 
2、获取document目录 
复制代码 代码如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   
NSString *path = [paths objectAtIndex:0];   
NSLog(@"path:%@", path); 
  
 
3、获取Cache目录 
复制代码 代码如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);   
NSString *path = [paths objectAtIndex:0];   
NSLog(@"%@", path);   

 
4、获取Library目录 
复制代码 代码如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);   
NSString *path = [paths objectAtIndex:0];   
NSLog(@"%@", path); 
 
 
5、获取Tmp目录 
复制代码 代码如下:

NSString *tmpDir = NSTemporaryDirectory();   
 NSLog(@"%@", tmpDir);  

 
6、写入文件 
复制代码 代码如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   
    NSString *docDir = [paths objectAtIndex:0];   
    if (!docDir) {   
        NSLog(@"Documents 目录未找到");           
    }   
    NSArray *array = [[NSArray alloc] initWithObjects:@"内容",@"content",nil];   
    NSString *filePath = [docDir stringByAppendingPathComponent:@"testFile.txt"];   
    [array writeToFile:filePath atomically:YES]; 

 
7、写入文件 
复制代码 代码如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   
    NSString *docDir = [paths objectAtIndex:0];   
    NSString *filePath = [docDir stringByAppendingPathComponent:@"testFile.txt"];   
    NSArray *array = [[NSArray alloc]initWithContentsOfFile:filePath];   
    NSLog(@"%@", array); 

8、判断一个文件是否存在,传入全路径(fileExistsAtPath)

复制代码 代码如下:

// 创建文件管理器 
NSFileManager * fileManager = [NSFileManager defaultManager]; 
 
NSString * documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; 
NSString * filePath = [documents stringByAppendingPathComponent:@"test"]; 
 
    // 判断一个文件是否存在,传入全路径 
    if ([fileManager fileExistsAtPath:filePath]) { 
        NSLog(@"it is exit"); 
    } 

9、在Documents里创建目录

复制代码 代码如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   
   NSString *documentsDirectory = [paths objectAtIndex:0];   
   NSLog(@"documentsDirectory%@",documentsDirectory);   
   NSFileManager *fileManager = [NSFileManager defaultManager];   
   NSString *testDirectory = [documentsDirectory stringByAppendingPathComponent:@"test"];   
   // 创建目录  
   [fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];

10、在目录下创建文件

复制代码 代码如下:

NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test00.txt"];   
NSString *testPath2 = [testDirectory stringByAppendingPathComponent:@"test22.txt"];   
NSString *testPath3 = [testDirectory stringByAppendingPathComponent:@"test33.txt"];   
 
 
NSString *string = @"写入内容,write String"; 
[fileManager createFileAtPath:testPath contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; 
[fileManager createFileAtPath:testPath2 contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; 
[fileManager createFileAtPath:testPath3 contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; 

11、获取目录列里所有文件名
两种方法获取:subpathsOfDirectoryAtPath 和subpathsAtPath

复制代码 代码如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   
NSString *documentsDirectory = [paths objectAtIndex:0];   
NSLog(@"documentsDirectory%@",documentsDirectory);   
NSFileManager *fileManage = [NSFileManager defaultManager];   
NSString *myDirectory = [documentsDirectory stringByAppendingPathComponent:@"test"];   
NSArray *file = [fileManage subpathsOfDirectoryAtPath: myDirectory error:nil];  
NSLog(@"%@",file);   
NSArray *files = [fileManage subpathsAtPath: myDirectory ];  
NSLog(@"%@",files); 

12、fileManager使用操作当前目录

复制代码 代码如下:

//创建文件管理器 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    //更改到待操作的目录下 
    [fileManager changeCurrentDirectoryPath:[documentsDirectory stringByExpandingTildeInPath]]; 
    //创建文件fileName文件名称,contents文件的内容,如果开始没有内容可以设置为nil,attributes文件的属性,初始为nil 
    NSString * fileName = @"testFileNSFileManager.txt"; 
    NSArray *array = [[NSArray alloc] initWithObjects:@"hello world",@"hello world1", @"hello world2",nil]; 
    [fileManager createFileAtPath:fileName contents:array attributes:nil]; 

13、删除文件
复制代码 代码如下:

[fileManager removeItemAtPath:fileName error:nil]; 

更多精彩内容其他人还在看

详解优化iOS程序性能的25个方法

本篇文章主要介绍了优化iOS程序性能的25个方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解iOS开发中解析JSON中的boolean类型的数据遇到的问题

这篇文章主要介绍了详解iOS开发中解析JSON中的boolean类型的数据遇到的问题,具有一定的参考价值,有兴趣的可以了解一下。
收藏 0 赞 0 分享

iOS中模态Model视图跳转和Push视图跳转的需求实现方法

这篇文章主要介绍了iOS中模态Model视图跳转和Push视图跳转的需求实现,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS+PHP注册登录系统 iOS部分(下)

这篇文章主要介绍了iOS+PHP注册登录系统的iOS部分,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解iOS - ASIHTTPRequest 网络请求

本篇文章主要介绍了iOS - ASIHTTPRequest 网络请求 ,详细的介绍了 ASIHTTPRequest的使用,具有一定的参考价值,有兴趣的可以了解一下。
收藏 0 赞 0 分享

零基础学习iOS直播之采集

直播的采集由采集的设备(摄像头、话筒)不同分为视频采集和音频采集,本篇文章会分别介绍,需要的朋友一起来看下吧
收藏 0 赞 0 分享

iOS自带动画效果的实例代码

本文给大家分享ios自带动画效果的实现代码,非常不错,具有参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

零基础学习iOS直播之播放

对于直播来说,客户端主要做两件事情,推流和播放。本篇主要对播放进行详细介绍,需要的朋友一起来看下吧
收藏 0 赞 0 分享

详解iOS中集成ijkplayer视频直播框架

ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持Android和iOS,本文将详细的讲一下在iOS中如何集成ijkplayer, 即便以前从没有接触过,按着下面做也可以集成成功!下面跟着小编一起来看下吧
收藏 0 赞 0 分享

iOS 将系统自带的button改装成上图片下文字的样子

这篇文章主要介绍了 iOS 将系统自带的button改装成上图片下文字的样子,代码是通过继承UIButton,然后再重写layoutSubviews方法,对自带的图片和titleLabel进行重新的layout。下面通过本文给大家分享下实现代码
收藏 0 赞 0 分享
查看更多