IOS NSFileHandle的使用七 (NSFileHandle的概念和用法)

一、读取文件类和常用方法

    NSFileManager类主要对文件的操作(删除、修改、移动、复制等等)。

    NSFileHandle类主要对文件内容进行读取和写入操作,可以使用NSFileHandle做文件的断点续传。

    NSFileHandle处理文件的步骤:

    1、创建一个NSFileHandle对象;

    2、对打开的文件进行I/O操作;

    3、关闭文件;

二、常用方法 

+ (id)fileHandleForReadingAtPath:(NSString *)path;    //打开一个文件只准读
+ (id)fileHandleForWritingAtPath:(NSString *)path;    //打开一个文件只准写
+ (id)fileHandleForUpdatingAtPath:(NSString *)path;    //打开一个文件可读写
//
- (NSData *)availableData;    //从设备或通道返回可用的数据
- (NSData *)readDataToEndOfFile;    //从当前位置读取到文件尾
- (NSData *)readDataOfLength:(NSUInteger)length;    //读取指定长度的内容
//
- (void)writeData:(NSData *)data;    //写数据

- (unsigned long long)offsetInFile;    //获取当前文件偏移量
- (unsigned long long)seekToEndOfFile;    //移动到文件尾
- (void)seekToFileOffset:(unsigned long long)offset;    //移动到指定偏移量
- (void)truncateFileAtOffset:(unsigned long long)offset;    //设置文件为指定大小
- (void)closeFile;    //关闭文件

三、相关代码如下:

    1、向指定文件中写入数据

        NSString *homepath = NSHomeDirectory();
        NSLog(@"homepath:%@",homepath);
        NSString *filepath = [homepath stringByAppendingPathComponent:@"Data/TestData/test.txt"];
        NSLog(@"filepath:%@",filepath);
        
        NSFileHandle *filehandle = [NSFileHandle fileHandleForUpdatingAtPath:filepath];
        //NSFileHandle *filehandle = [NSFileHandle fileHandleForWritingAtPath:filepath];
        
        [filehandle seekToEndOfFile];
        NSString *str = @"追加的数据";
        NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
        
        [filehandle writeData:data];
        [filehandle closeFile];

    2、向指定文件中读出数据

        NSString *homepath = NSHomeDirectory();
        NSString *filepath = [homepath stringByAppendingPathComponent:@"Data/TestData/test.txt"];
        NSFileHandle *filehandle = [NSFileHandle fileHandleForUpdatingAtPath:filepath];
        
        NSUInteger length = [filehandle availableData].length;
        [filehandle seekToFileOffset:length/2];
        
        NSData *data = [filehandle readDataToEndOfFile];
        NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        
        NSLog(@"the data is :%@",str);
        [filehandle closeFile];

    3、对文件进行相关操作

        NSString *homepath = NSHomeDirectory();
        NSString *filepath = [homepath stringByAppendingPathComponent:@"Data/TestData/test.txt"];
        NSString *targetpath = [homepath stringByAppendingPathComponent:@"Data/TestData/test2.txt"];
        
        NSFileManager *filemanager = [NSFileManager defaultManager];
        
        BOOL result = [filemanager createFileAtPath:targetpath contents:nil attributes:nil];
        if (result == true) {
            NSLog(@"文件创建成功!");
        }
        
        NSFileHandle *sourcefilehandle = [NSFileHandle fileHandleForReadingAtPath:filepath];
        NSFileHandle *targetfilehandele = [NSFileHandle fileHandleForWritingAtPath:targetpath];
        
        NSData *data = [sourcefilehandle readDataToEndOfFile];
        [targetfilehandele writeData:data];
        
        [sourcefilehandle closeFile];
        [targetfilehandele closeFile];


你可能感兴趣的:(NSFileHandle)