对文件内容的操作和C语言相同,分为“读”和“写”。
我们来直接看如何读取吧
读文件
按字节读取
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建文建句柄
NSFileHandle *fh=[NSFileHandle fileHandleForReadingAtPath:@"/Users/apple/Desktop/SSL/file"];
//以只读方式打开文件生成文件句柄,(文件句柄相当于C语言中的文件指针)
//从硬盘(文件)到内存叫做读,从内存到(文件)硬盘叫做写
//读指定的字节
NSData *data=[fh readDataOfLength:3];
NSString *str=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
}
return 0;
}
我在文件中存入
I love 3g!
这里程序运行后的结果为:
I l
输出的是“I”,“ ”,“l”
如果我们接着读取呢?这里他就和C语言不同了,C语言一直是从头开始读,而OC会接着读。
//每次的读取都接着上一次的进度,每次读取都有读指针的偏移量
data=[fh readDataOfLength:6];
NSString *str2=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str2);
输出:
ove 3g
全文件读取
//读出剩余所有文本,如果之前有读文本,则从上一次的进度接着读,如果没有,从0开始读。
NSData *data2=[fh readDataToEndOfFile];
NSString *str3=[[NSString alloc]initWithData:data2 encoding:NSUTF8StringEncoding];
NSLog(@"%@",str3);
他也是,如果上面已经有读取的操作了,它会接着打印剩余的全部,但是如果没有,他会从头开始打印。
写文件
覆盖写入
//写文件
//以只写方式打开文件生成文件句柄
NSFileHandle *fh=[NSFileHandle fileHandleForWritingAtPath:@"/Users/apple/Desktop/SSL/file"];
[fh writeData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]];
我们之前读出文件的是
I love 3g!
那我们猜猜现在写入文件后,文件内容是什么?
helloe 3g!
清空写入
//清空文件的内容,写入文件
[fh truncateFileAtOffset:3];//将文件内容截断至几个字节,如果要清空文件内容,只需要截断至0个字节
我们这里试用一下这个方法,截取至剩余3个字节,文件内容为
hel
追加文件
这里和C语言又有所不同,这里我们需要先把文件内部指针移至文件尾部,
//追加文件
//将文件指针设在文件尾端
[fh seekToEndOfFile];
[fh writeData:[@"XXX" dataUsingEncoding:NSUTF8StringEncoding]];
文件内容变为
helXXX