oc自学-使用文件
Foundation框架允许你利用文件系统对文件或目录执行基本操作。这些操作是有NSFileManager类提供的,具有如下功能:创建一个新文件,从现有文件中读取数据,将数据写入文件,重命名文件,删除文件,测试文件是否存在,确定文件的大小和其他属性,复制文件,测试两个文件的内容是否相同。
上面的多数方法也可以对目录进行操作,另一个重要特性是链接文件,即同一个文件存在两个不同的名字,有时甚至位于不同的目录中。
使用NSFileHandle类提供的方法,可以打开文件并对文件执行多次读/写操作。NSFileHandle类可以实现如下功能:打开一个文件,执行读、写或更新操作,在文件中查找指定位置,从文件中读取特定数目的字节,或将指定数目的字节写入文件中。
NSFileHandle类提供的方法也可用于各种设备或套接字。
NSURL类允许在应用中使用URL方法。
NSBundle类提供允许在应用中使用包(bundle)的方法,包括搜索包中的特定资源(如JPEG图片)。
管理文件和目录:NSFileManager
对于NSFileManager,文件或目录是使用文件的路径名的唯一表示。每个路径名都是NSString对象。
相对路径:ch16/copy.m,存储在ch16中的文件copy1.m,ch16包含在当前目录中
绝对路径:/users/stevekochan,一斜线(/)开始。
特殊的带字符(~)作为用户主目录的缩写。~linda可能是/User/linda。
我们可以通过使用方法和函数来获取当前目录的路径名、用户的主目录及可以用来创建零时文件的目录。
常见NSFileManager文件方法:P381,这些方法都是对象方法。创建NSFileManager对象:
NSFileManager *fm; ... fm = [NSFileManager defaultManager]; //删除名为todolist的文件,先创建NSFileManager对象,再调用removeItemAtPath方法。 if([fm removeItemAtPath: @"todolist error: NULL"] == NO) { NSLog(@"Couldn`t remove file todolist"); }
对于现有的文件,属性字典包括各种信息,如文件的所有者、文件大小、文件的创建日期等等。字典的每个属性可以通过键值提取,而所有的键都定义在头文件<Foundation/NSFileManager.h>中。例如,表示文件大小的键值为NSFileSize。
代码使用:P382-384
使用NSData类
使用文件时,需要频繁的将数据读入到一个临时存储区(缓冲区)。NSData类,用来设置缓冲区、将文件的内容读入缓冲区,或将缓冲区的内容写到一个文件。定义不可变缓冲区(NSData类),可变缓冲区(NSMutableData类)。
NSData *fileData; fileData = [fm contentsAtPath: @"newfile2"]; if (fileData == nil ){ NSLog(@“File read failed!”); return 1 } if ([fm creatFileAtPath: @"newfile3" contens: fileData attributes: nil] == NO) { NSLog(@"Couldn`t creat the copy"); return 2 }
使用目录
NSFileManager常见的目录方法:P387
代码清单:P387-388
枚举目录中的内容
enumeratorAtPath: 方法,一次可以枚举指定目录中的每个文件,默认情况下,其中一个文件为目录,那么也会递归枚举它的内容。在过程中,通过向枚举对象发送一条skipDescendants消息,可以动态的阻止递归过程,从而不在枚举目录中的内容。
contentsOfDirectoryAtPath:error:方法可以枚举指定目录的内容,并在一个数组中返回文件列表。如果这个目录中任何文件本身是一个目录,这个方法并不递归枚举它的内容。
NSString *path; NSFileManager *fm; NSDirectoryEnumerator *dirEnum; NSArray *dirArray; fm = [NSFileManager defaultManager]; path = [fm currentDirectoryPath]; dirEnum = [fm enumeratorAtPath: path]; while ((path = [dirEnum nextObject]) != nil) { NSLog(@"%@",path); [fm fileExistsAtPath: path isDirectory: &flag]; if (flag == YES) { [dirEnum skipDescendents]; } } dirArray = [fm contentsOfDirectoryaAtPath: [fm currentDirectioryPath] error: NULL];
//NSLog(@"%@",dirArray) for (path in dirArray) { NSLog(@"%@",path) }
使用路径: NSPathUtilities.h
常见路径方法:P394-395
//返回文件saveFile在Documents目录中的路径.
-(NSString *) saveFilePath { NSArray *dirList = NSSearchPathForDirectioriesInDomains(NSDocumentsDirectory,NSUserDomainMask,YES); NSString *docDir = dirList[0]; return [docDir striingByAppendingPathComponent: @"saveFile"]; }
常见ios目录:P395
复制文件和使用NSProcessInfo类
使用命令行工具来实现简单的文件复制操作:
copy from-file to-file
to-file可以是目录名,文件以名称from-file被复制到to-file目录中。如果to-file目录已存在,允许覆盖其内容。
通过在main函数中使用argv和argc参数,可以从命令行中获得文件名。这两个参数分别包括命令行中键入的参数个数(包括命令名),以及指向C风格的字符串数组的指针。
NSProcessInfo允许你设置或检索正在运行的应用程序(即进程)的各种类型的信息。
NSProcessInfo类方法:P397
基本的文件操作:NSFIleHandle
一般而已,处理文件需要经历一下步骤:
1、打开文件,并获取一个NSFileHandle对象,一变在后面的I/O操作中引用该文件。
2、对打开的文件执行I/O操作。
3、关闭文件。
常用的NSFileHandle方法:P400
NSFileHandle *inFile,*outFile; NSData *buffer; //打开outFile文件进行写入 outFile = [NSFileHandle fileHandleForWritingAtPath: @"testout"]; if (outFile == nil) { NSLog(@""); return 2 } //因为它可能包含数据,截断输出文件 [outFile truncateFileAtOffset: 0]; //从inFile中读取数据,将它写到outFile buffer = [inFile readDataToEndOfFile]; [outFile writeData: buffer]; //关闭这两个文件 [inFile closeFile]; [outFile closeFile]; //验证文件内容 NSLog(@"%@",[NSString stringWithContentsOfFile: @"testout" encoding: NSUTF8StringEncoding error: NULL]);NSURL类
如何通过程序从一个网站读取HTML内容
NSURL *myURL = [NSURL URLWithString: @"http:/classroomM.com""]; NSString *myHomePage = [NSString stringWithContentOfURL: myURL encoding: NSASCIIStringEncoding error: NULL];dictionaryWithContentsOfURL arrayWithContentsOfURL
dataWithContentsOfURL
NSBundle类
当创建一个应用时,系统存储了应用相关联的所有数据(包括图片、本地化字符串、图标等),将这些内容放入一个称为应用包(application bundle)的包中。
//返回存储在应用包中instructions.txt文件的路径 NSString *txtFilePath = [[NSBundle mainBundle] pathForResource: @"instructions" ofType: @"text"];mainBundle方法给出了应用包所在的目录。 如果希望列出在应用包的图片目录中所有以jpg为文件名的JPEG图片,需要使用到pathsForResourceOfType:inDirectory:方法:
NSArray *birds = [[NSBundle mainBundle] pathsForResourcesOfType: @"jpg" inDirectory: @"birdImages"];
- 自学Android系列 笔记2 使用文件进行数据存储
- OC基础14:使用文件
- OC的文件管理类NSFileManager类的使用详解
- [黑马IOS自学第九篇]OC语言基础,面向对象概念,类的创建,OC多文件开发等
- 使用jQuery OCUpload实现excel文件一键上传功能
- 黑马程序员--OC自学笔记---02对象存储细节、NSString简介、多文件开发
- 8086汇编语言自学经验分享 使用link连接,生成exe文件
- Python自学之路第十六步——使用文件
- OC基础14:使用文件
- 在swift中使用oc文件
- 黑马程序员--OC自学笔记---07@property使用之电商app练习
- Swift基础之Swift调用OC语言文件使用步骤
- iOS 整理基于socket集成Protobuf相关环境,以及将Protobuf文件转成OC文件,以及使用Protobuf
- 在OC的h头文件声明使用C++ class,不引用C++的h文件
- 自学整理一:java文件对话框的使用(包括文件多选,文件、文件夹同时可选操作)
- OC之使用MD5加密字符串、NSData和文件的方法
- OC使用use_frameworks!添加swift,其他库头文件不提示
- OC中的数组,常使用的函数,怎样将字符串写到文件中,将数组写到文件中
- Swift基础之Swift调用OC语言文件使用步骤
- OC学习笔记16--OC中文件操作-NSFileManager的使用及文件操作中常用的一些字符串方法