您的位置:首页 > 移动开发 > Objective-C

[6]姥爷幽默谈Objective-C-文件操作类NSFileManager,NSFileHandle

2016-01-10 21:22 399 查看
一.1NSFileManager

Description: An NSFileManager object lets you examine the contents of the file system and make changes to it. A file manager object is usually your first interaction with the file system. You use it to locate, create, copy, and move files and directories. You also use it to get information about a file or directory or change some of its attributes.

NSFileManager: 文件管理者对象可以让你查询文件系统并且做你想要的修改,它是您的第一次与文件系统的交互。你可以使用它去定位文件,创建文件,拷贝文件,并且移动文件和目录。你也可以使用它得到文件或者目录或者改变一些它的属性。


2.创建文件管理对象

由于NSFileManager是一个工具类所以它也是一个单例类,所以我们直接调用它的defaultManager单例一个对象。
NSFileManager *fm = [NSFileManage defaultManager];


3.文件管理器的功能

创建文件:第一个参:文件路径 + 文件名;第二个参:是否创建中间路径   NO不用创建中间路径YES自动补齐中间路径;第三个参数:是文件创建的属性 nil默认属性;第四个参数: 是错误信息捕捉
BOOL ret=[fm createDirectoryAtPath:@"/Users/apple/Desktop/b/a"
withIntermediateDirectories:NO attributes:nil error:&e];
ret=[fm createFileAtPath:newS contents:nil attributes:nil];

删除文件:
ret=[fm removeItemAtPath:[NSString stringWithFormat:@"%@/%@",PATH,@"a"] error:&e];

拷贝文件:
拷贝  把A 文件 或者 A文件夹 拷贝到另一个路径下
ret = [fm copyItemAtPath:URL(@"file.txt") toPath:URL(@"m.txt") error:nil];
ret = [fm copyItemAtPath:URL(@"a") toPath:URL(@"b") error:nil];
移动文件
[fm moveItemAtPath:URL(@"file.txt") toPath:URL(@"/b/file.txt") error:nil];

查找文件
浅度遍历
只查看 本目录下的文件 或者是文件夹 不会查看子目录下的文件
NSArray *arr= [fm contentsOfDirectoryAtPath:URL(@"") error:nil];

深度遍历
遍历目录下的文件以及子目录下的文件
NSArray *arr1 = [fm subpathsOfDirectoryAtPath:URL(@"b") error:nil];

查看文件 / 文件夹的属性
NSDictionary * dic=[fm attributesOfItemAtPath:URL(@"m.txt") error:nil];
//获得文件大小  1G 传输数据的时候 需要控制一次传的数据量 100M
size_t size= [[dic objectForKey:@"NSFileSize"] integerValue];

//查看目录下是否存在文件 或者是目录 并且区分开 到底是文件还是目录
BOOL isDirectory = NO;
ret=[fm fileExistsAtPath:URL(@"file.txt") isDirectory:&isDirectory];
//返回值 ret表示 目录是否存在文件或者目录
//isDirectory来判断 如果isDirectory是1 就是目录
//如果返回isDirectory是0 就是文件

错误信息
NSError * e;


二、NSData data

NSData是数据的意思  数据转换使用的使用文件的时候 往文件里面写内容 也是要把数据 转化成NSData 或者NSMutbleData类型 存到文件里面的

NSData 不可变缓存数据
NSMutableData 可变缓存数据

NSString和NSData的转化
NSData NSMutableData
//把字符串转化成 NSData
NSData * data = [s dataUsingEncoding:NSUTF8StringEncoding];
//把NSData转化成字符串
NSString * s1 = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];


三、字符串和文件相关的 方法

NSString * filePath = @"/Users/apple/Desktop/qfile.rar";
//取出文件的后缀名
NSString * extension = [filePath pathExtension];
//取文件名称
NSString * lastPart =[filePath lastPathComponent];


四.FileHandle

FileHandle类用来操作文件而且是用来操作文件内容这个不是单例类。

1、读文件
NSFileHandle *readFileH =[NSFileHandle fileHandleForReadingAtPath:PATH];

//开始读输入  一次性把文件中的数据都读出来
NSData *data = [readFileH readDataToEndOfFile];

//只想读一部分  20bytes
NSData *d2 = [readFileH readDataOfLength:20];

//想从某一个位置开始读 100个bytes开始读
//把游标放到第100个bytes的位置上
[readFileH seekToFileOffset:100];

//下次开始读的时候 就继续读从上次读到的位置
[readFileH readDataOfLength:200];

//指向读最后 到最后那里去定位
[readFileH seekToEndOfFile];


2、写文件

//创建一个写文件柄  管理文件的
NSFileHandle * writeFileH=[NSFileHandle fileHandleForWritingAtPath:@"/Users/apple/Desktop/a.txt" ];
[writeFileH writeData:data];
//每次写数据都是接着上一次的位置开始写的
[writeFileH writeData:data];

//可以定位到指定的地点 去继续写
[writeFileH seekToFileOffset:100];
[writeFileH seekToEndOfFile];

//写文件柄 将文件清空  指定位置之后的数据 进行一个清空
[writeFileH truncateFileAtOffset:0];
[writeFileH truncateFileAtOffset:100];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息