Object C学习笔记26-文件管理(二)
上一篇简单的介绍了如何获取文件属性,删除,拷贝文件等,本文继续记录Object C中文件IO操作。
一. 获取文件的执行主目录
在Object C中提供了一个方法 NSHomeDirectory() 用于获得执行执行的主目录,使用如下代码测试:
NSString *homePath=NSHomeDirectory();
NSLog(@"执行文件的主目录:%@",homePath);
通过以上代码可以正确的输出应用程序的执行目录,上一张也提到了文件的目录问题,这个和Windows系统的有些差别,在这个里面没有具体的盘符之分。
二. 创建一个新文件
在Object C中如何使用函数创建一个新文件,在自带的库中提供了相应的方法,createFileAtPath:(NSString*) contents:(NSString*) attributes:(NSDictionary *) 方法可以实现创建文件。
NSString *newFilePath=[[NSString alloc] initWithFormat:@"/ISO DeV/a.txt"];
NSFileManager *fileManager=[NSFileManager defaultManager];
if([fileManager fileExistsAtPath:newFilePath]==NO){
NSLog(@"文件不存在,接下来新建一个文件");
[fileManager createFileAtPath:newFilePath contents:nil attributes:nil];
}
if([fileManager fileExistsAtPath:newFilePath]==YES){
NSLog(@"新建文件已经成功");
}
三. 文件的读写
在.NET中提供了一些文件读写的类,可以很方便的操作文件的IO读写.在Object C中也存在着一个类NSFileHandler可以很方便的读写文件和写入文件。文件的读写操作一般分为以下几个步骤:
(1)创建一个NSFileHandler对象,打开文件
(2) 对文件进行IO的读写操作
(3) 关闭文件
以上步骤和.NET中的基本类似,只是在类以及操作方法上不一样,下面的代码就是如何创建一个NSFileHandle类.
NSFileHandle *fileHandler=[NSFileHandle fileHandleForReadingAtPath:newFilePath];
if(fileHandler==nil){
NSLog(@"文件不存在");
}else{
NSLog(@"文件存在");
} fileHandler=[NSFileHandle fileHandleForWritingAtPath:newFilePath];
if(fileHandler==nil){
NSLog(@"文件不存在");
}else{
NSLog(@"文件存在");
}
以上提供了两个方法 fileHandleReadingAtPath 和 fileHandleWritingAtPath 用于获取NSFileHandle对象实例。但是以上两个方法适用于读取和写入文件的,如果文件路径不存在则返回nil.在上一章说道了创建一个新的文件,所以在这之前我们需要先创建该文件,并且在其中初始化一些内容:
[fileManager createFileAtPath:newFilePath contents:@"dsadafdasdfasfdsa" attributes:nil];
以上代码很熟悉,我们新建一个文件,并且在文件中写入一些内容。
四. 文件的读写
从上面可的记录中我们得到读写文件所用的方式不一样,现在我们做一个比较简单的例子: 将一个文件中的内容读取出来,然后写入到另外一个文件。但是这里我们要先确保文件是存在的。
第一步:读取文件
NSFileHandle *fileHandler=[NSFileHandle fileHandleForReadingAtPath:newFilePath];
if(fileHandler==nil){
NSLog(@"文件不存在");
}else{
NSLog(@"文件存在"); NSData *buffer=[fileHandler readDataToEndOfFile];
}
我们使用fileHandleForReadingAtPath 打开一个文件,这个文件的路径为newFilePath,而且这个路径是肯定存在的,这个文件中有一些内容。下面有个方法readDataToEndOfFile 用于读取文件中的内容,得到一个NSData对象实例,这里的NSData 相当于byte字节数组一样[个人理解]。
第二步:写入文件内容
NSFileHandle *write=[NSFileHandle fileHandleForWritingAtPath:@"/ISO DeV/File.txt"];
[write writeData:buffer];
[write closeFile];
[fileHandler closeFile];
在根据fileHandleForWritingAtPath创建一个NSFileHandle 的对象实例,这个实例用于来写入文件内容. 我们将上面得到的NSData数据写入到文件中。提供了writeData方法用于写数据。操作完成之后要关闭文件。
这里和.NET中的写文件有点区别,在.NET中有一个Flush的操作过程,用于刷新缓冲去,这里貌似没有这个操作。
最后使用如下代码验证一下是否写入到新的文件,也当回顾一下这个方法:
NSLog(@"%@",[NSString stringWithContentsOfFile:@"/ISO DeV/File.txt" encoding:NSUTF8StringEncoding error:nil]);
可以正确的输出其内容,而且文件内容和原来的文件内容一致。
五. 追加文件内容
如果要像写入文件的时候不覆盖原有内容,我们必须设置文件的NSFileHandle的偏移量,如果是追加文件我们只需要偏移量移到最后即可。而设置文件操作偏移量使用方法seekToFileOffset 或者使用 seekToEndOfFile 将文件偏移量移到最后面。
NSString *value=@"adsfasfasf4343434";
NSData *data= [value dataUsingEncoding:NSUTF8StringEncoding];
NSFileHandle *write=[NSFileHandle fileHandleForWritingAtPath:@"/ISO DeV/File.txt"];
[write seekToEndOfFile];
[write writeData:data];
[write closeFile];
通过以上代码我们可以将新的内容添加到文件fIle.txt的最末尾.如果要再中间插入一下内容,我们只需要设置偏移量。
NSString *value=@"";
NSData *data= [value dataUsingEncoding:NSUTF8StringEncoding];
NSFileHandle *write=[NSFileHandle fileHandleForWritingAtPath:@"/ISO DeV/File.txt"];
[write seekToFileOffset:];
[write writeData:data];
[write closeFile];
我们不将偏移量设置到最末尾即可。
Object C学习笔记26-文件管理(二)的更多相关文章
- React Native 学习笔记--进阶(二)--动画
React Native 进阶(二)–动画 动画 流畅.有意义的动画对于移动应用用户体验来说是非常必要的.我们可以联合使用两个互补的系统:用于全局的布局动画LayoutAnimation,和用于创建更 ...
- Object C学习笔记22-#define 用法
上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...
- Object C学习笔记21-typedef用法
在上一章的学习过程中遇到了一个关键字typedef,这个关键字是C语言中的关键字,因为Object C是C的扩展同样也是支持typedef的. 一. 基本作用 typedef是C中的关键字,它的主要作 ...
- Object C学习笔记18-SEL,@ selector,Class,@class
本章是对上一章<<Object C学习笔记17-动态判断和选择器>>的一点补充,所以比较简单点. 一. SEL 类型 在上一篇介绍了几个方法,都只是介绍了其使用方式但是没有具体 ...
- Object C学习笔记17-动态判断和选择器
当时学习Object C的时被人鄙视了一顿,说使用.NET的思想来学Object C就是狗屎:不过也挺感谢这位仁兄的,这让我学习的时候更加的谨慎.今天的学习笔记主要记录Object C中的动态类型相关 ...
- VSTO 学习笔记(十二)自定义公式与Ribbon
原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...
- Object C学习笔记24-关键字总结
学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1. #import #import <> 从syste ...
- 【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型
[Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698. ...
- Linux进程间通信IPC学习笔记之同步二(SVR4 信号量)
Linux进程间通信IPC学习笔记之同步二(SVR4 信号量)
- Linux进程间通信IPC学习笔记之同步二(Posix 信号量)
Linux进程间通信IPC学习笔记之同步二(Posix 信号量)
随机推荐
- inux下文件权限设置中的数字表示权限,比如777,677等,这个根据什么得来的
chmod ABC file 其中A.B.C各为一个数字,分别表示User.Group.及Other的权限. A.B.C这三个数字如果各自转换成由“0”.“1”组成的二进制数,则二进制数的每一位分别代 ...
- The available repos for opensuse13.2
opensuse13.2国内源和设置命令 ustc-osshttp://mirrors.ustc.edu.cn/opensuse/distribution/13.2/repo/oss/ustc-n ...
- 最小瓶颈路 Uva 534 Frogger
说明:关于Uva的题目,可以在vjudge上做的,不用到Uva(那个极其慢的)网站去做. 最小瓶颈路:找u到v的一条路径满足最大边权值尽量小 先求最小生成树,然后u到v的路径在树上是唯一的,答案就是这 ...
- sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)
第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的 DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...
- C++ 基础笔记(一)
解释型和编译型 解释型: 边解释边执行,翻译成机器代码后就执行. 编译型: 整篇代码编译成机器码后,保存在可执行文件中,然后启动该程序文件,运行获得结果. Hello World #include & ...
- Junit使用GroboUtils进行多线程测试
写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的.JVM都终止了,在测试线程启动的其他线程自 ...
- mysql数据库的备份和导入
mysqldump -u root -p --default-character-set = gbk -d demo_db>c:/appserv/www/demosql/sql1.sql//将数 ...
- 解决: osx内置vpn连接后无法ping自己的vpn ip地址
The route table looks like this after connected to the VPN: 10.20.1/24 10.20.11.147 UGSc 0 0 utun0 1 ...
- f2fs解析(三)NAT中如何区分inode和其他dnode
首先,我们要知道NAT中的每个表项都对应着MAIN AREA区域中NODE段的一个block,还要知道NODE block很特别,block末尾会有一个node footer结构: 243 struc ...
- 022医疗项目-模块二:药品目录的导入导出-对XSSF导出excel类进行封装
资源全部来源于传智播客. 好的架构师写的程序,就算给刚入门的新手看,新手一看就知道怎么去用.所以我们要对XSSF导出excel类进行封装.这是架构师的工作,但我们也要知道. 我们写一个封装类: 这个类 ...