OC文件管理:4-文件内容读取与写入
当对文件进行操作时,有时需要读取文件的内容,然后把文件的内容放到内存中的一块缓冲区以供后续使用。另外,有时还需要把数据缓冲区中的内容写入到文件中进行保存。这两种操作就涉及到文件的读取以及写入操作。文件的读取以及写入,除了使用NSFileManager类之外,还需要使用到NSData类所提供的缓冲区。
文件内容的读取
在NSFileManager类中,提供了contentsAtPath:方法,该可以读取指定目录中的文件,同时返回值是一个NSData类型的对象。
- (nullable NSData *)contentsAtPath:(NSString *)path;
数据写入文件
对于已经保存在缓冲区中的NSData对象,可以写入文件,常用的有两种方法,既可以使用NSFileManager类提供的方法,也可以使用NSData类提供的方法。
- 方法一:使用NSData类的writeToFile方法
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- 方法二:使用NSFileManager类提供的createFileAtPath方法
- (BOOL)createFileAtPath:(NSString *)path contents:(nullable NSData *)data attributes:(nullable NSDictionary<NSString *, id> *)attr;
示例代码
下方的示例代码演示了对文件内容的读取以及解码(NSData转NSString),以及把NSData对象写入文件进行保存的过程。
首先在桌面上创建一个myfile.txt文件,并在文件中输入一些文字内容。
在main()函数中,编写如下代码。
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSFileManager *fm = [NSFileManager defaultManager];
//变更当前目录到桌面Desktop
NSArray * paths = NSSearchPathForDirectoriesInDomains (NSDesktopDirectory, NSUserDomainMask, YES);
NSString * desktopPath = [paths objectAtIndex:0];
[fm changeCurrentDirectoryPath:desktopPath];
//读取文件内容
NSString *filePath = [desktopPath stringByAppendingPathComponent:@"myfile.txt"];
NSData *fileData = [fm contentsAtPath:filePath];
NSString *fileContent = [[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding];
NSLog(@"%@",fileContent);
//把NSData写入文件
//方法一
NSString *newFilePath1 = [desktopPath stringByAppendingPathComponent:@"myNewFile1.txt"];
if ([fileData writeToFile:newFilePath1 atomically:YES]) {
NSLog(@"使用writeToFile:方法写入成功!");
};
//方法二
NSString *newFilePath2 = [desktopPath stringByAppendingPathComponent:@"myNewFile2.txt"];
if ([fm createFileAtPath:newFilePath2 contents:fileData attributes:nil]) {
NSLog(@"使用createFileAtPath:方法写入成功!");
};
}
return 0;
}
运行结果:
代码下载地址:
https://github.com/99ios/4.7.4