免费开源的iOS开发学习平台

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