码迷,mamicode.com
首页 > 其他好文 > 详细

UI进阶 文件管理器(NSFileManager)文件对接器(NSFileHandle)

时间:2016-06-04 14:54:13      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

一、文件管理器与文件连接器之间的区别

文件管理器(NSFileManager)

此类主要是对文件进行的操作(创建/删除/改名等)以及文件信息的获取。

文件连接器(NSFileHandle)

此类主要是对文件内容进行读取和写入操作。

二、文件管理器(NSFileManager)

技术分享

 

技术分享

1、创建文件夹管理器

1 NSFileManager *fileManager = [NSFileManager defaultManager];

 

2、创建文件并写入数据

 1     // 创建文件夹管理器
 2     NSFileManager *fileManager = [NSFileManager defaultManager];
 3     // 创建路径
 4     NSString *homePath = NSHomeDirectory();
 5     homePath = [homePath stringByAppendingPathComponent:@"string.txt"];
 6     // 初始化一个字符串 
7
NSString *string = @"创建一个文件并写入数据"; 8 // 创建文件string.txt 并向stirng.txt中添加数据
9 // 参数1:文件路径 10 // 参数2:NSData类型 11 // 参数3:参数 12 BOOL result = [fileManager createFileAtPath:homePath contents:[string dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; 13 if (result) { 14 NSLog(@"成功 %@", homePath); 15 } else { 16 NSLog(@"失败"); 17 }

 

3、从一个文件中读取数据

 1     // 创建文件夹管理器
 2     NSFileManager *fileManager = [NSFileManager defaultManager];
 3     // 创建路径
 4     NSString *homePath = NSHomeDirectory();
 5     homePath = [homePath stringByAppendingPathComponent:@"string.txt"];
 6     // 从string.txt中获取数据
 7     NSData *data = [fileManager contentsAtPath:homePath];
 8     // 将NSData类型的数据转换成NSString类型的数据,并输出
 9     NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
10     NSLog(@"string %@", string);

 

4、文件的移动

 1     // 创建文件夹管理器
 2     NSFileManager *fileManager = [NSFileManager defaultManager];
 3     // 创建路径
 4     NSString *homePath = NSHomeDirectory();
 5     NSString *filePath = [homePath stringByAppendingPathComponent:@"string.txt"];
 6     // 创建toPath
 7     NSString *toPath = [homePath stringByAppendingPathComponent:@"test.txt"];
 8     // 将string.txt中的数据移动到test.txt中,并将string.txt删除
 9     BOOL result = [fileManager moveItemAtPath:filePath toPath:toPath error:nil];
10     if (result) {
11         NSLog(@"成功  %@", toPath);
12     } else {
13         NSLog(@"失败");
14     }

5、文件的复制

 1     // 创建文件夹管理器
 2     NSFileManager *fileManager = [NSFileManager defaultManager];
 3     // 创建路径
 4     NSString *homePath = NSHomeDirectory();
 5     NSString *filePath = [homePath stringByAppendingPathComponent:@"test.txt"];
 6     // 创建toPath
 7     NSString *toPath = [homePath stringByAppendingPathComponent:@"copy.txt"];
 8     // 将test.txt中的数据复制到copy.txt中,保留test.txt文件
 9     BOOL result = [fileManager copyItemAtPath:filePath toPath:toPath error:nil];
10     if (result) {
11         NSLog(@"成功  %@", toPath);
12     } else {
13         NSLog(@"失败");
14     }

6、比较两个文件的内容是否一样

 1     // 创建文件夹管理器
 2     NSFileManager *fileManager = [NSFileManager defaultManager];
 3     // 创建路径
 4     NSString *homePath = NSHomeDirectory();
 5     NSString *filePath = [homePath stringByAppendingPathComponent:@"test.txt"];
 6     // 创建toPath
 7     NSString *toPath = [homePath stringByAppendingPathComponent:@"copy.txt"];
 8     // 比较两个文件的内容是否一致
 9     BOOL result = [fileManager contentsEqualAtPath:filePath andPath:toPath];
10     if (result) {
11         NSLog(@"内容一致");
12     } else {
13         NSLog(@"内容不一致");
14     }

7、判断文件是否存在

 1     // 创建文件夹管理器
 2     NSFileManager *fileManager = [NSFileManager defaultManager];
 3     // 创建路径
 4     NSString *homePath = NSHomeDirectory();
 5     NSString *filePath = [homePath stringByAppendingPathComponent:@"test.txt"];
 6     // 判断文件是否存在
 7     BOOL result = [fileManager fileExistsAtPath:filePath];
 8     if (result) {
 9         NSLog(@"文件存在");
10     } else {
11         NSLog(@"文件不存在");
12     }

8、移除文件

 1     // 创建文件夹管理器
 2     NSFileManager *fileManager = [NSFileManager defaultManager];
 3     // 创建路径
 4     NSString *homePath = NSHomeDirectory();
 5     NSString *filePath = [homePath stringByAppendingPathComponent:@"test.txt"];
 6     // 移除文件
 7     BOOL result = [fileManager removeItemAtPath:filePath error:nil];
 8     if (result) {
 9         NSLog(@"移除成功");
10     } else {
11         NSLog(@"移除失败");
12     }

9、创建文件夹

1、根据给定的文件夹路径创建

 1     // 创建文件夹管理器
 2     NSFileManager *fileManager = [NSFileManager defaultManager];
 3     // 创建路径
 4     NSString *homePath = NSHomeDirectory();
 5     NSString *filePath = [homePath stringByAppendingPathComponent:@"test1/test2"];
 6     // 创建文件夹
 7     BOOL result = [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
 8     if (result) {
 9         NSLog(@"创建成功");
10     } else {
11         NSLog(@"创建失败");
12     }

 

2、根据给定的文件路径,创建其所在文件夹

 1     // 创建文件夹管理器
 2     NSFileManager *fileManager = [NSFileManager defaultManager];
 3     // 创建路径
 4     NSString *homePath = NSHomeDirectory();
 5     NSString *filePath = [homePath stringByAppendingPathComponent:@"test3/test4/hello.txt"];
 6     // 创建文件夹test4
 7     // stringByDeletingLastPathComponent 删除路径最后一个/以及后面的内容
 8     BOOL result = [fileManager createDirectoryAtPath:[filePath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil];
 9     if (result) {
10         NSLog(@"创建成功");
11     } else {
12         NSLog(@"创建失败");
13     }

 

三、文件连接器(NSFileHandle)

NSFileHandle是非常基础的只针对文件内容的操作(写入,读取,更新),是把NSData通过连接器一个字节一个字节的写入/读取文件.(NSData <—> NSFileHandle <—> 文件).

使用场景:
    对文件内容的进行局部修改、追加内容。

使用步骤
    1).文件对接并获取一个NSFileHandle对象.
    2).读写操作
    3).关闭对接

注意:NSFileHandle类并没有提供创建文件的功能。必须使用NSFileManager方法来创建文件。因此,在使用下表中的方法时,都是保证文件已经存在,否则返回nil.

技术分享

技术分享

1、读取数据

1、读取文件中的全部数据

 1     // string.txt已经存在,获取其路径
 2     NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"string.txt"];
 3     // 创建文件连接器,并打开一个文件准备读取
 4     NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
 5     // 从string.txt中读取全部数据
 6     NSData *data = [handle availableData];
 7     NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
 8     NSLog(@"string %@", string);
 9     // 关闭文件连接器
10     [handle closeFile]; 

2、从指定位置读取到文件末尾

注意,当文件中的数据是汉字时,因为utf-8的中文字符是占三个字节,所以偏移量必须是3的倍数,否则读取不到数据

 1     // string.txt已经存在,获取其路径
 2     NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"string.txt"];
 3     // 创建文件连接器,并打开一个文件准备读取
 4     NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
 5     // 获取stirng.txt中数据字节数
 6     NSUInteger length = [[handle availableData] length];
 7     //  偏移量为文件的一半
 8     [handle seekToFileOffset:length/2.0];
 9     // 获取当前文件的偏移量
10     NSLog(@"%llu", [handle offsetInFile]);
11     // 从数据的一半位置开始读取,读取到文件末尾
12     NSData *data = [handle readDataToEndOfFile];
13     NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
14     NSLog(@"string %@", string);
15     [handle closeFile];

3、从指定位置读取指定长度的数据

 1     // string.txt已经存在,获取其路径
 2     NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"string.txt"];
 3     // 创建文件连接器,并打开一个文件准备读取
 4     NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
 5     // 获取stirng.txt中数据长度
 6     NSUInteger length = [[handle availableData] length];
 7     //  偏移量为文件的一半
 8     [handle seekToFileOffset:length/2.0];
 9     // 从数据的一半位置开始读取,读取3个字节
10     NSData *data = [handle readDataOfLength:3];
11     NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
12     NSLog(@"string %@", string);
13     [handle closeFile];

 2、截取文件为指定长度

1     // string.txt已经存在,获取其路径
2     NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"string.txt"];
3     // 创建文件连接器,并打开一个文件写入读取
4     NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:filePath];
5     // 将文件的长度设置为21字节
6     [handle truncateFileAtOffset:21];
7     [handle closeFile];

3、在文件的指定位置拼接数据

 1     // string.txt已经存在,获取其路径
 2     NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"string.txt"];
 3     // 创建文件连接器,并打开一个文件写入(或更新)读取
 4     NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:filePath];
 5     // 搜索到文件内容末尾
 6     [handle seekToEndOfFile];
 7     NSString *appendStr = @" world";
 8     // 在文件的末尾拼接字符串
 9     [handle writeData:[appendStr dataUsingEncoding:NSUTF8StringEncoding]];
10     [handle closeFile];

 

UI进阶 文件管理器(NSFileManager)文件对接器(NSFileHandle)

标签:

原文地址:http://www.cnblogs.com/fearlessyyp/p/5558721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!