#define FILEPATH @"/Users/test/Desktop/newfile.txt" NSFileHandle * fh = [NSFileHandle fileHandleForReadingAtPath:FILEPATH]; if(nil != fh) { NSData * data = [fh readDataOfLength:5]; //读5个字符 NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@", str); }
注:NSFileHandle相当于C语言中的FILE指针,那么读文件就相当于fopen函数中使用“r”作为打开文件模式。既然它与C语言类似,那读文件的时候也会有一个内部的读文件指针。当读完5个字符后,读文件指针已经被移动到了第五个字符后,如果再读字符,那么就从第六个字符开始了。
NSFileHandle * fh = [NSFileHandle fileHandleForReadingAtPath:FILEPATH]; if(nil != fh) { NSData * data = [fh readDataToEndOfFile]; //读全部内容 NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@", str); }注:这里要注意的是,如果文件内容过大的话,一下子都读到内存中,可能会造成内存崩溃的。
NSFileHandle * fh = [NSFileHandle fileHandleForWritingAtPath:FILEPATH]; if(nil != fh) { [fh writeData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]]; }注:写文件函数相当于fopen函数中使用“w”作为打开文件模式。但它不同的是,如果文件不存在,它不会创建。并且,如果源文件存在的话,它会从文件起始位置开始写,将原来的内容进行覆盖。那如何清理原内容,然后重新写信息呢,请看下面的方法。
NSFileHandle * fh = [NSFileHandle fileHandleForWritingAtPath:FILEPATH]; if(nil != fh) { [fh truncateFileAtOffset:0]; //截断源文件,将文件内容大小截成零 [fh writeData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]]; }注意:有人说了,不想将内容清空,要在原来的基础上添加新内容,相当于fopen函数中使用“a”作为打开文件的模式。
NSFileHandle * fh = [NSFileHandle fileHandleForWritingAtPath:FILEPATH]; if(nil != fh) { [fh seekToEndOfFile]; //将指针移到文件末位 [fh writeData:[@", world!" dataUsingEncoding:NSUTF8StringEncoding]]; }