iOS阶段学习第17天笔记(NSFileManager-NSFileHandle-文件操作)

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

iOS学习(OC语言)知识点整理

一、单例模式

1)单例是一种编程思想,一个设计模式,与语言无关在采用了单例对象的应用程序中,需要单例类自行提供实例化单例对象,

不管实例化单例对象多少次,只有一个对象存在,这个对象是全局的,能够被整个应用程序共享,访问

2)使用单例模式时使用类提供的类方法获取单例对象,尽量不要用alloc init的方法获取单例对象

3)单例类提供类方法获取单例对象时类方法一般以sharedXX/standedXX/defaultXX开头

实例代码:

#import"Plane.h"staticPlane *plane=nil;//定义一个静态的全局变量@implementation Plane//获取单例对象的方法+(Plane *)sharedPalne

{//解决数据同步(当一个线程访问时,其他的线程不能操作@synchronized(self){if(plane==nil){

plane=[[Plane alloc]init];

}

}returnplane;

}//当调用alloc方法时会执行此方法+(id)allocWithZone:(struct_NSZone *)zone

{

NSLog(@"%@",NSStringFromSelector(_cmd));if(plane==nil){

plane=[super allocWithZone:zone];

}returnplane;

}

@end

二、NSFileManager 文件/文件夹 的操作

1)NSFileManager 用于对文件或目录(文件夹)管理的单例类。

2)文件管理类的实例化方法 例如:

1NSFileManager *fm=[NSFileManager defaultManager];

3)fileExistsAtPath 用于判断文件是否存在 例如:

1BOOL ret=[fm fileExistsAtPath:@"/Users/kingkong/Desktop/Test/test.txt"];

4)createFileAtPath 用于创建文件 第一个参数是文件名,第二个参数是文件的初始值,第三个参数是文件的属性 例如:

1BOOL ret=[fm createFileAtPath:@"/Users/kingkong/Desktop/Test/test.txt"contents:nil attributes:nil];

5)copyItemAtPath 用于复制文件:将某一个文件复制成另一个文件,第三个参数:回调错误信息 例如:

1NSError *error=nil;//用于接收错误信息3NSString *curpath=@"/Users/kingkong/Desktop/Test/test.txt”;

5 NSString *topath=@"/Users/kingkong/Desktop/Test/test2.txt”;7ret=[fm copyItemAtPath: curpath toPath: topath error:&error];9if(error!=nil){11NSLog(@"error:%@",[error userInfo]);13}

6)moveItemAtPath 用于移动/重命名文件;将某个路径下的文件移动到另一个路径下的文件(目标路径一定要指定文件名),

如果源路径与目 标路径下的文件名不同,同时重命名 例如:

1NSString *curpath=@"/Users/kingkong/Desktop/Test/test.txt”;23NSString *topath=@"/Users/kingkong/Desktop/Test/test2.txt”;45[fm moveItemAtPath: curpath toPath: topath error:nil];

7)attributesOfItemAtPath 获取文件的属性 例如:

1NSString *curpath=@"/Users/kingkong/Desktop/Test/test.txt";23NSDictionary *dict=[fm attributesOfItemAtPath: curpath error:nil];45//获取属性字典中该文件的大小67NSLog(@"size:%@",[dict objectForKey:NSFileSize]);

8)removeItemAtPath 用于删除指定路径下的文件 例如:

1NSString *path=@"/Users/kingkong/Desktop/Test/test.txt”;23BOOL ret=[fm removeItemAtPath: path error:nil];

9)NSData:当对文件操作(写数据到文件和从文件中读数据)和从网络上获取数据,需要将数据转换为纯粹的二进制形式,

NSData就是二进制形式的缓存对象,相当于C中的char buf[255] 例如:

1NSString *path=@"/Users/kingkong/Desktop/Test/test.txt”;23NSData *content=[fm contentsAtPath: path];

10)NSData数据转换为NSString类型数据 例如:

1//NSData---->NSString,将NSData对象转换为字符串23NSString *scontent=[[NSString alloc]initWithData:content encoding:NSUTF8StringEncoding];

11)NSString类型的数据转换为NSData数据 例如:

1NSString *str=@"hello China!";23//NSString---->NSData;将字符串转换为NSData数据(写入文件或传输到网络上)45NSData *data2=[str dataUsingEncoding:NSUTF8StringEncoding];

12)createFileAtPath … contents 建文件并指定写入内容 例如:

1NSString *path=@"/Users/kingkong/Desktop/Test/test.txt”;23[fm createFileAtPath:path contents:data2 attributes:nil];

13)fileExistsAtPath… isDirectory 判断目录是否存在(在文件/目录存在的情况下,通过第二个参数获取是否是目录/文件) 例如:

1BOOL isDir;//可能结果有:-1,0,123NSString *path=@"/Users/kingkong/Desktop/Test/test.txt”;45BOOL ret=[fm fileExistsAtPath:path isDirectory:&isDir];

14)contentsOfDirectoryAtPath 浅遍历:获取目录下的子目录和文件名 例如:

1NSString *path=@"/Users/kingkong/Desktop/Test”;23NSArray *array=[fm contentsOfDirectoryAtPath: path error:nil];45NSLog(@"array%@",array);

15)subpathsAtPath 深遍历:获取目录下所有的内容(包括子目录下的所有的内容) 例如:

1NSString *path=@"/Users/kingkong/Desktop/Test”;23NSArray *array2=[fm subpathsAtPath:path];45NSLog(@"array2:%@",array2);

16)currentDirectoryPath 获取当前应用程序所在目录 例如:

1NSString* currentPath=[fm currentDirectoryPath];23NSLog(@"%@",currentPath);

17)createDirectoryAtPath… withIntermediateDirectories 创建目录,第一个参数是目录名,第二个参数是

当目录不存在时是否需要创建其上一级不存在的目录(中间目录)

1NSString *path=@"/Users/kingkong/Desktop/Test/File”;23BOOL ret=[fm createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];

三、NSFileHandle 对文件进行读写操作

1)fileHandleForReadingAtPath 创建一个只读文件的对象(句柄) 例如:

1NSString *path=@"/Users/kingkong/Desktop/Test/test.txt”;23NSFileHandle *readHandle=[NSFileHandle fileHandleForReadingAtPath: path];

2)readDataOfLength 读取文件中指定长度的内容 例如:

NSData *data=[readHandle readDataOfLength:3];

NSString*sdata=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"%@",sdata);

3)readDataToEndOfFile 从当前位置读取内容到文件结束 例如:

1data=[readHandle readDataToEndOfFile];23sdata=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];45NSLog(@"%@",sdata);67[readHandle closeFile];//读取文件内容结束(注意如果上次读取过没关闭再次读取时会从上次读取结束位置开始读取)

4)fileHandleForWritingAtPath 创建一个只写文件的对象 例如:

1NSFileHandle *writeHandle=[NSFileHandle fileHandleForWritingAtPath:path"];23NSString *s1=@"hello";45//seekToEndOfFile 将对象指针移到文件末尾(实现追加内容)67[writeHandle seekToEndOfFile];89[writeHandle writeData:[s1 dataUsingEncoding:NSUTF8StringEncoding]];1011//synchronizeFile将数据同步写入文件中1213[writeHandle synchronizeFile];1415[writeHandle closeFile];//表明操作结束

5)truncateFileAtOffset 从指定位置字符开始截断文件内容,保留多少个字符,设置为0,再写入相当于清空重写 例如:

1[writeHandle truncateFileAtOffset:4];

6)seekToFileOffset 从指定位置字符开始写入文件,覆盖部分内容 例如:

1[writeHandle seekToFileOffset:2];

四、关于Path (文件路径)的操作

1)pathComponents 获取路径的各部分 例如:

1NSString *path=@"/Users/kingkong/Desktop/Test/text.txt”;23NSArray *array1= [path pathComponents];45NSLog(@"array1:%@",array1);

2)pathExtension 获取文件后缀名 例如:

1NSLog(@"%@",[path pathExtension]);//结果:txt

3)isAbsolutePath 判断是否是绝对路径:以/开头的路径 例如:

1NSLog(@"%d",[path isAbsolutePath]);//结果:1

4)lastPathComponent 获取路径的最后一部分 例如:

1NSLog(@"last:%@",path.lastPathComponent);//结果:text.txt

5)stringByAppendingPathComponent 在一个路径后添加另一个路径 例如:

1NSLog(@"%@",[path stringByAppendingPathComponent:@"files”]);23//结果:/Users/kingkong/Desktop/Test/text.txt/files

6)stringByAppendingPathExtension 为路径添加扩展名 例如:

1NSLog(@"%@",[path stringByAppendingPathExtension:@"m"]);23//结果:/Users/kingkong/Desktop/Test/text.txt.m

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航