iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1、在Documents里创建目录

创建一个叫test的目录,先找到Documents的目录,

[cpp] view plain copy
  1. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    
  2.    NSString *documentsDirectory = [paths objectAtIndex:0];    
  3.    NSLog(@"documentsDirectory%@",documentsDirectory);    
  4.    NSFileManager *fileManager = [NSFileManager defaultManager];    
  5.    NSString *testDirectory = [documentsDirectory stringByAppendingPathComponent:@"test"];    
  6.    // 创建目录  
  7.    [fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];  

启动程序,这时候目录就创建了:


2、在test目录下创建文件

创建文件怎么办呢?接着上面的代码 testPath 要用stringByAppendingPathComponent拼接上你要生成的文件名,比如test00.txt。这样才能在test下写入文件。

testDirectory是上面代码生成的路径哦,不要忘了。我往test文件夹里写入三个文件,test00.txt ,test22.txt,text.33.txt。内容都是写入内容,write String。

实现代码如下:

[cpp] view plain copy
  1. NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test00.txt"];    
  2. NSString *testPath2 = [testDirectory stringByAppendingPathComponent:@"test22.txt"];    
  3. NSString *testPath3 = [testDirectory stringByAppendingPathComponent:@"test33.txt"];    
  4.   
  5.   
  6. NSString *string = @"写入内容,write String";  
  7. [fileManager createFileAtPath:testPath contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];  
  8. [fileManager createFileAtPath:testPath2 contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];  
  9. [fileManager createFileAtPath:testPath3 contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];  
看下面的图,三个文件都出来了,内容也对。

在Documents目录下创建就更简单了,不用加test就ok了

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

两种方法获取:subpathsOfDirectoryAtPath 和 subpathsAtPath

[cpp] view plain copy
  1. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    
  2. NSString *documentsDirectory = [paths objectAtIndex:0];    
  3. NSLog(@"documentsDirectory%@",documentsDirectory);    
  4. NSFileManager *fileManage = [NSFileManager defaultManager];    
  5. NSString *myDirectory = [documentsDirectory stringByAppendingPathComponent:@"test"];    
  6. NSArray *file = [fileManage subpathsOfDirectoryAtPath: myDirectory error:nil];   
  7. NSLog(@"%@",file);    
  8. NSArray *files = [fileManage subpathsAtPath: myDirectory ];   
  9. NSLog(@"%@",files);  

获取上面刚才test文件夹里的文件名

打印结果

2012-06-17 23:23:19.684 IosSandbox[947:f803] fileList:(

    ".DS_Store",

    "test00.txt",

    "test22.txt",

    "test33.txt"

)

2012-06-17 23:23:19.686 IosSandbox[947:f803] fileLit(

    ".DS_Store",

    "test00.txt",

    "test22.txt",

    "test33.txt"

)

两个方法都可以,隐藏的文件也打印出来了。

4、fileManager使用操作当前目录

[cpp] view plain copy
  1. //创建文件管理器  
  2.     NSFileManager *fileManager = [NSFileManager defaultManager];  
  3.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  4.     NSString *documentsDirectory = [paths objectAtIndex:0];  
  5.     //更改到待操作的目录下  
  6.     [fileManager changeCurrentDirectoryPath:[documentsDirectory stringByExpandingTildeInPath]];  
  7.     //创建文件fileName文件名称,contents文件的内容,如果开始没有内容可以设置为nil,attributes文件的属性,初始为nil  
  8.     NSString * fileName = @"testFileNSFileManager.txt";  
  9.     NSArray *array = [[NSArray alloc] initWithObjects:@"hello world",@"hello world1", @"hello world2",nil];  
  10.     [fileManager createFileAtPath:fileName contents:array attributes:nil];  
这样就创建了testFileNSFileManager.txt并把三个hello world写入文件了

changeCurrentDirectoryPath目录更改到当前操作目录时,做文件读写就很方便了,不用加上全路径

5、删除文件

接上面的代码,remove就ok了。

[cpp] view plain copy
  1. [fileManager removeItemAtPath:fileName error:nil];  
6、混合数据的读写

用NSMutableData创建混合数据,然后写到文件里。并按数据的类型把数据读出来

6.1写入数据:
[cpp] view plain copy
  1. NSString * fileName = @"testFileNSFileManager.txt";  
  2. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  3. NSString *documentsDirectory = [paths objectAtIndex:0];  
  4. //获取文件路径  
  5. NSString *path = [documentsDirectory stringByAppendingPathComponent:fileName];  
  6. //待写入的数据  
  7. NSString *temp = @"nihao 世界";  
  8. int dataInt = 1234;  
  9. float dataFloat = 3.14f;  
  10. //创建数据缓冲  
  11. NSMutableData *writer = [[NSMutableData alloc] init];  
  12. //将字符串添加到缓冲中  
  13. [writer appendData:[temp dataUsingEncoding:NSUTF8StringEncoding]];     
  14. //将其他数据添加到缓冲中  
  15. [writer appendBytes:&dataInt length:sizeof(dataInt)];  
  16. [writer appendBytes:&dataFloat length:sizeof(dataFloat)];    
  17. //将缓冲的数据写入到文件中  
  18. [writer writeToFile:path atomically:YES];  

我们看看数据怎么样了:


我们看到后面的是乱码,那是中文被转成了NSData后,还有int float的二进制

6.2读取刚才写入的数据:

[cpp] view plain copy
  1. //读取数据:  
  2.    int intData;  
  3.    float floatData = 0.0;  
  4.    NSString *stringData;  
  5.      
  6.    NSData *reader = [NSData dataWithContentsOfFile:path];  
  7.    stringData = [[NSString alloc] initWithData:[reader subdataWithRange:NSMakeRange(0, [temp length])]  
  8.                                   encoding:NSUTF8StringEncoding];  
  9.    [reader getBytes:&intData range:NSMakeRange([temp length], sizeof(intData))];  
  10.    [reader getBytes:&floatData range:NSMakeRange([temp length] + sizeof(intData), sizeof(floatData))];  
  11.    NSLog(@"stringData:%@ intData:%d floatData:%f", stringData, intData, floatData);  

打印出来的结果:

2012-06-17 23:51:14.723 IosSandbox[1285:f803] stringData:nihao hello! intData:1234332 floatData:3.140000

这里把写入的汉字改成了 hello。因为[temp length]算长度是,把中文算成一位了,出来的结果有误。

转载于:https://my.oschina.net/china008/blog/232783

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

触发器与约束的适用条件

触发器是一种特殊类型的存储过程,当对数据库进行UPDATE,DELETE或INSERT时,触发器会生效.触发器可以查询其它表,而且可以包含复杂的 SQL 语句。 创建触发器语法:CREATE TRIGGER trigger_nameON { table | view }[ WITH ENCRYPTION ]{{ { FOR |…

https网络编程——使用openssl库自建根证书

参考:如何自建根证书?使用openssl库自建根证书带图详解 地址:https://qingmu.blog.csdn.net/article/details/108217572?spm1001.2014.3001.5502 目录根证书的普通用途自建根证书步骤1、创建一个目录,存放所有证书有关资料2、进入…

angular接口传参

1、service文件 创建xxx.service.ts文件 import { Injectable, Inject } from angular/core;import { Observable } from rxjs;import { map } from rxjs/operators;import { HttpClient } from angular/common/http;Injectable({ providedIn: root})export class ErrorCond…

lvm-snapshot:基于LVM快照的备份

续 lvm-snapshot:基于LVM快照的备份之准备工作Attention,Please! 重头戏开始啦3.基于LVM快照的备份lvm-snapshot:基于LVM快照的备份(1)事务日志跟数据文件必须在同一个卷上;(2)创建快照卷之前,要请求MySQL的全局锁;在快…

美玉待琢——《一本写满评论的艾泽拉斯收藏指南》

http://bbs.ngacn.com/read.php?tid701056&fpage1 转载于:https://www.cnblogs.com/Evanescence/archive/2006/10/11/526396.html

https网络编程——如何建立利用根证书(凭证)签发建立中继证书(凭证)详解

参考:如何建立利用根证书(凭证)签发建立中继证书(凭证)详解 地址:https://qingmu.blog.csdn.net/article/details/108221568?spm1001.2014.3001.5502 目录在建立中继之前需要自建根证书建立根证书的具体步…

NURBS曲线与曲面

B样条方法在表示与设计自由型曲线曲面形状时显示了强大的威力,然而在表示与设计初等曲线曲面时时却遇到了麻烦。因为B样条曲线包括其特例的Bezier曲线都不能精确表示出抛物线外的二次曲线,B样条曲面包括其特例的Bezier曲面都不能精确表示出抛物面外的二次…

IPTV网络电视

IPTV即交互式网络电视,是一种利用宽带网的基础设施,以计算机(PC)或“普通电视机+网络机顶盒(TV+IPSTB)”为主要终端设备,向用户提供视频点播、Internet访问、电子邮件、游…

https网络编程——如何利用中继证书(凭证)建立服务器证书

参考:如何利用中继证书(凭证)建立服务器证书 地址:https://qingmu.blog.csdn.net/article/details/108225569?spm1001.2014.3001.5502 目录建立服务器证书的前提是要建立中继证书建立服务器证书的具体步骤1、建立一个目录&#x…

上传图片

2019独角兽企业重金招聘Python工程师标准>>> private File imageFile;// 上传文件名称private String imageFileFileName;// 上传文件类型private String imageFileContextType; InputStream is new FileInputStream(imageFile);String suffixName imageFileFileN…

解析 XML

解析 XML Firefox 可以自动的将当前页面解析为 DOM(文本对象模型), 您也可以通过 XML 语句(可以是您自己编写的,也可以是您从远端主机得到的)来创建DOM。 例子:将一个字符串解析为 XML var xm…

BZOJ4912 SDOI2017天才黑客(最短路+虚树)

容易想到把边当成点重建图跑最短路。将每条边拆成入边和出边,作为新图中的两个点,由出边向入边连边权为原费用的边。对于原图中的每个点,考虑由其入边向出边连边。直接暴力两两连边当然会被卡掉,注意到其边权是trie上lca的深度&am…

网页乱码解决小心得

出现乱码需要检查的项目:数据库编码、文件本身的字符集、html解析的字符集,如若上述项目编码一致仍然出现乱码,查看一下浏览器的编码,如果和设置的不一样说明上述设置有部分未成功,可以尝试使用header(&…

https网络编程——如何利用中继证书(凭证)建立客户端证书

参考:如何利用中继证书(凭证)建立客户端证书 地址:https://qingmu.blog.csdn.net/article/details/108226592?spm1001.2014.3001.5502 目录建立客户端证书的前提是要建立中继证书建立客户端证书的具体步骤1、建立一个目录&#x…

分布式一致性协议Raft,以及难搞的Paxos

https://blog.csdn.net/colorant/article/details/73887706转载于:https://www.cnblogs.com/wzj4858/p/10350363.html

ffmpeg的新东东:AVFilter

http://blog.csdn.net/niu_gao/article/details/7219641 利用ffmpeg做图像的pixel format转换你还在用libswscale吗?嘿嘿,过时啦! ffmpeg中有了新东西:libavfilter.使用它,可以完全代替libswscale,并且可以自动完成一些复杂的转换操作呢.libavfilter啊,用了都说好!但就是太复杂…

https网络编程——HTTPS中SSL具体通信过程

参考:HTTPS中SSL是如何进行通信的? 地址:https://qingmu.blog.csdn.net/article/details/108277887?spm=1001.2014.3001.5502 目录 1、https中SSL通讯的前置准备工作2、openssl库相关函数介绍2.1、重要参数讲解3、SSL框架图4、demo4.1、sslserver.c4.2、sslclient.c1、http…

想跟着微软赛跑会累死你

当微软在推出ASP.NET1.1时,就发布了ASP.NET2.0测试版,当微软发布ASP.NET2.0时,又发布了ASP.NET AJAX测试版,当然也有不少人都知道,微软又有准备推出ASP.NET3.0版本的打算. 每一个版本比上一个版本都会有许多应用上的提升,一个重要的问题是:我们需要不需要和微软赛跑? 微软…

2019.2.4 nfs原理和安装实验

NFS 访问一个本地文件还是NFS共享文件对于客户端而言都是透明的,当文件打开的瞬间,内核会作出一个决定,如果是本地文件内核会将本地NFS共享文件内核会将NFS共享文件的所有引用传递给——》NFS客户端枢中 NFS客户端是通过TCP/IP协议及模块向NF…

基本 XAML 语法指南

我们介绍了 XAML 语法规则,以及用于描述 XAML 语法中存在的限制或选项的术语。当出现以下情况时你会发现本主题很有用:不熟悉 XAML 语言的使用,希望加强对术语或某些语法部分的理解,或者对 XAML 语言的工作原理感兴趣,…