美文网首页
iOS沙盒-NSBundle

iOS沙盒-NSBundle

作者: 吃蘑菇De大灰狼 | 来源:发表于2018-12-01 10:29 被阅读34次

沙盒NSBundle

iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。
NSBundle包,是一种特定的文件类型,一个主要作用是 获取Resources文件夹中的资源
[NSBundle mainBundle]是获得NSBundle的一个单例对象,次单例对象 已经设置了默认的resourcePath,也就是你的app打包后的路径,

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

沙盒目录结构

默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。因为应用的沙盒机制,应用只能在几个目录下读写文件

  • Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
  • Library:存储程序的默认设置或其它状态信息;
  • Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
  • tmp:提供一个即时创建临时文件的地方。
  • iTunes在与iPhone同步时,备份所有的Documents和Library文件。
  1. 获取程序的Home目录
NSArray 
NSString *homeDirectory = NSHomeDirectory();  
NSLog(@"path:%@", homeDirectory);  
  1. 获取document目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
NSString *path = [paths objectAtIndex:0];  
NSLog(@"path:%@", path);   
  1. 获取Cache目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);  
NSString *path = [paths objectAtIndex:0];  
NSLog(@"%@", path);  
  1. 获取Library目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);  
NSString *path = [paths objectAtIndex:0];  
NSLog(@"%@", path);  
  1. 获取Tmp目录
NSString *tmpDir = NSTemporaryDirectory();  
NSLog(@"%@", tmpDir); 
  1. 写入文件
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];
  1. 读取文件
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);  

NSFileManager

文件管理器

0、判断一个文件是否存在,传入全路径(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");
}

1、在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];  

2、在目录下创建文件

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];  

3、获取目录列里所有文件名

两种方法获取: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);  

4、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]; 

5、删除文件

[fileManager removeItemAtPath:fileName error:nil];  

参考

  1. 沙盒机制和文件(三) · iOS 高级 · 看云

相关文章

  • iOS沙盒-NSBundle

    沙盒NSBundle iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙...

  • NSBundle和沙盒(Document、Library和Cas

    NSBundle和沙盒(Document、Library和Cashes) 首先要区分NSBundle和沙盒我们分两...

  • ios下的数据持久化技术

    应用程序沙盒 NSBundle,xxx.appNSString *bundlePath = [[NSBundle ...

  • 沙盒\NSBundle

    参考链接: https://www.kancloud.cn/digest/data/106687http://ww...

  • 沙盒和NSBundle

    一、NSBundle目录和沙盒路径对比 沙盒目录: /Users/mrwangxiansen/Library/De...

  • 沙盒和NSBundle的区别

    1 沙盒和NSBundle的区别 沙盒(NSHomeDirectory()) 是系统加载 app时,为 app 分...

  • 沙盒和NSBundle

    沙盒 1、沙盒机制介绍 iOS中的沙盒机制是一种安全体系。每个iOS程序都有一个独立的文件系统(存储空间),而且只...

  • 沙盒和NSBundle

    沙盒 1、沙盒机制介绍 iOS中的沙盒机制是一种安全体系。每个iOS程序都有一个独立的文件系统(存储空间),而且只...

  • iOS10沙盒目录下动态库加载失败问题

    将动态库放沙盒documents目录下,使用dlopen或NSBundle方式加载,在模拟器下运行正常,在iOS1...

  • iOS 系统相关复习

    沙盒 iOS沙盒详细介绍iOS沙盒篇 沙盒机制介绍 iOS中的沙盒机制是一种安全体系。为了保证系统安全,iOS每个...

网友评论

      本文标题:iOS沙盒-NSBundle

      本文链接:https://www.haomeiwen.com/subject/msulcqtx.html