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=@"555555555555";
NSData *data= [value dataUsingEncoding:NSUTF8StringEncoding];
NSFileHandle *write=[NSFileHandle fileHandleForWritingAtPath:@"/ISO DeV/File.txt"];
[write seekToFileOffset:3];
[write writeData:data];
[write closeFile];

    我们不将偏移量设置到最末尾即可。

Object C学习笔记26-文件管理(二),布布扣,bubuko.com

时间: 2024-12-17 23:54:28

Object C学习笔记26-文件管理(二)的相关文章

Object C学习笔记25-文件管理(一)

在此篇文章中简单记录一下文件管理,在Object C中NSFileManager用于管理文件已经路径.在Object C中的文件路径可以是相对路径也可以是绝对路径.斜线"/"开头,斜线实际上就是一个目录,称为 根目录.字符(-)用作用户主目录的缩写.点" . "表示当前目录,两点"  .. "表示父目录. 一. 创建NSFileManager 对象 NSFileManager非常简单,可以使用如下方式来创建NSFileManager对象. NSS

《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)

Array(数组)是JavaScript中较为复杂的数据类型,同Java.C#.VB等程序语言的数组相比,Javascript数组中的元素不必为相同的数据类型,可以在数组每个元素上混合使用数字.日期.字符串.Object,甚至添加一个嵌套数组. 一.创建数组 1.var arr1 = new Array(); /var  arr2 = new Array(length); /var arr3 = new Array(element1,element2...); var arr4 = [eleme

SaltStack 学习笔记 - 第十二篇: SaltStack Web 界面

SaltStack 有自身的用python开发的web界面halite,好处是基于python,可以跟salt的api无缝配合,确定就比较明显,需要个性化对web界面进行定制的会比较麻烦,如果喜欢体验该界面的可以参考下面的文章  http://rfyiamcool.blog.51cto.com/1030776/1275443/ 我是运用另一个python+php来进行web开发,具体需要的工具有在我的另一篇文章里面介绍过,这里再重新进行整个开发介绍 首先介绍php 跟python通信的工具 pp

Java Object类学习笔记

看下Api文档的一些说明 public class Object Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class. Since: JDK1.0 从JDK1.0就已经存在的元老类,类结构的根,所有类的父类,所有类都实现了这个类的方法,包含

【Unity 3D】学习笔记四十二:粒子特效

粒子特效 粒子特效的原理是将若干粒子无规则的组合在一起,来模拟火焰,爆炸,水滴,雾气等效果.要使用粒子特效首先要创建,在hierarchy视图中点击create--particle system即可 粒子发射器 粒子发射器是用于设定粒子的发射属性,比如说粒子的大小,数量和速度等.在创建完粒子对象后,在右侧inspector视图中便可以看到所有的粒子属性: emit:是否是使用粒子发射器. min size:粒子最小尺寸. max size:粒子最大尺寸. min energy:粒子的最小生命周期

马哥学习笔记三十二——计算机及操作系统原理

缓存方式: 直接映射 N路关联 缓存策略: write through:通写 write back:回写 进程类别: 交互式进程(IO密集型) 批处理进程(CPU密集型) 实时进程(Real-time) CPU: 时间片长,优先级低IO:时间片短,优先级高 Linux优先级:priority 实时优先级: 1-99,数字越小,优先级越低 静态优先级:100-139,数据越小,优先级越高 实时优先级比静态优先级高 nice值:调整静态优先级   -20,19:100,139   0:120 ps

【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型

[Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698.html 写作本系列文章时使用的是Unity5.3. 写代码之前: 当然啦,如果Unity都没安装的话肯定不会来学Unity Shaders吧? 阅读本系列文章之前你需要有一些编程的概念. 在VS里面,Unity Shaders是没有语法高亮显示和智能提示的,VS党可以参考一下这篇文章使代码高亮显示

python基础教程_学习笔记26:好玩的编程

好玩的编程 程序设计的柔术 当大家坐下来并计划应该如何组织程序的时候,对于这个具体的程序,还没有任何的经验.在实现功能的时候,会逐渐地学到对原始设计有用的新知识.不应该无视一路走来所吸取的教训,而应该将它们用于软件的重新设计(或重构)中. 灵活性的实现包括许多方面,下面是其中两个: 原型设计:python最棒的功能之一就是可以快速地编写程序.编写原型程序是更充分地了解问题的一种很好的方法. 配置:灵活性有很多种存在形式.配置的目的就是让程序某部分的改变更简单,对于你和用户来说都是这样. 第三点是

【Unity 3D】学习笔记三十二:游戏元素——游戏光源

游戏光源 在3D游戏中,光源是一个非常具有特色的游戏组件.用来提升游戏画面质感的.如果没有加入光源,游戏场景可能就会显得很昏暗.在unity中提供了三种不同的光源类型:点光源,聚光灯,平行光. 点光源 顾名思义,点光源是从一个点向周围散发出光的光源,就像电灯一样.创建点光源在hierarchy视图中点击create--point light: 创建完以后,点击点光源对象,在右侧inspector视图中可以看到点光源的所有信息: type:光源的类型.有point(点光源),directional