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

所属分类: 软件编程 / IOS 阅读数: 865
收藏 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开发笔记--详解UILabel的相关属性设置

这篇文章主要介绍了iOS开发笔记--详解UILabel的相关属性设置,对初学者具有一定的参考价值,有需要的可以了解一下。
收藏 0 赞 0 分享

iOS中获取系统相册中的图片实例

这篇文章主要介绍了iOS中获取系统相册中的图片实例,具有一定的参考价值没有需要的朋友可以了解一下。
收藏 0 赞 0 分享

iOS 检测网络状态的两种方法

一般有Reachability和AFNetworking监测两种方式,都是第三方的框架,下文逐一详细给大家讲解,感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

IOS 性能优化中离屏渲染

本文主要介绍了IOS 性能优化中离屏渲染的资料,提供了几种方法讲解了优化,有需要的小伙伴可以参考下
收藏 0 赞 0 分享

iOS获取当前设备型号等信息(全)包含iPhone7和iPhone7P

这篇文章主要介绍了iOS获取当前设备型号设备信息的总结包含iPhone7和iPhone7P,包括ios7之前之后的获取方式,本文接的非常详细,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS实现爆炸的粒子效果示例代码

之前在网上看到了一个Android实现的爆炸效果,感觉非常不错,所以自己尝试用iOS来实现下效果,现在将实现的过程、原理以及遇到的问题分享给大家,有需要的朋友们可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

iOS毕业设计之天气预报App

这篇文章主要为大家详细介绍了iOS毕业设计之天气预报App,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

iOS轻点、触摸和手势代码开发

这篇文章主要为大家详细介绍了iOS轻点、触摸和手势代码开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

iOS 实现多代理的方法及实例代码

这篇文章主要介绍了iOS 实现多代理的方法及实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS文字渐变色效果的实现方法

在大家日常开发iOS的过程中,可能会遇到要实现文字渐变色的效果,这篇文章文章通过示例代码和详细的步骤介绍了如何利用iOS实现文字渐变色的效果,实现后的很不错,感兴趣的朋友们下面来一起看看吧。
收藏 0 赞 0 分享
查看更多