OC 文件管理 NSFileManager NSFileHandle 归档和解档

我的梦境 提交于 2020-03-01 16:34:19

  //输出文件路径 跟目录

    NSString *stringPath = NSHomeDirectory();

    NSLog(@"%@",stringPath);

    

   //取出文件路径的组成部分

    NSLog(@"%@",[stringPath pathComponents]);

    //取出文件路径的最后一个组成部分

    NSLog(@"%@",[stringPath lastPathComponent]);

    

    //给文件路径追加一部分路径

    NSLog(@"%@",[stringPath stringByAppendingPathComponent:@"te.text"]);

    

  


    

    

    //-----------------------文件管理

    //创建一个文件管理 fileManager

    NSFileManager *fileManager = [NSFileManager defaultManager];

    

    //获取当前路径

    NSLog(@"当前路径为:%@",[fileManager currentDirectoryPath]);

    //创建文件内容 NSString类型

    NSString *fileString = @"listFlie";

    

    //将字符串类型转换为NSData类型 编码格式为NSUTF8

    NSData *fileData = [fileString dataUsingEncoding:NSUTF8StringEncoding];

    

    //创建文件  方法createFileAtPath 返回BOOL类型 if判断

    if ([fileManager createFileAtPath:[stringPath stringByAppendingPathComponent:@"list.text"] contents:fileData attributes:nil]) {

        NSLog(@"文件创建成功");

    }

    

    //读取文件 contentsAtPath: 返回NSData类型

    NSData *contentData = [fileManager contentsAtPath:[stringPath stringByAppendingPathComponent:@"list.text"]];

    //NSData类型转转换为NSString类型

    NSString *contentString = [[NSString alloc]initWithData:contentData encoding:NSUTF8StringEncoding];

    //读取文件内容

    NSLog(@"读取文件内容 :%@",contentString);

    

    //复制文件

    [fileManager copyItemAtPath:[stringPath stringByAppendingPathComponent:@"list.text"] toPath: @"/Users/a11/desktop/test.txt" error:nil];

    

    //移动文件

    [fileManager moveItemAtPath:[stringPath stringByAppendingPathComponent:@"list.text"] toPath:@"/Users/a11/desktop/test.txt" error:nil];

    

    //删除文件

    [fileManager removeItemAtPath:@"/Users/a11/desktop/test.txt" error:nil];

    

   //创建文件目录 也就是创建文件夹

   if ([fileManager createDirectoryAtPath:[stringPath stringByAppendingPathComponent:@"newFile.text"] withIntermediateDirectories:YES attributes:nil error:nil])

    {

        NSLog(@"文件目录创建成功");

    }

   

    //读取文件目录的内容

    [fileManager contentsOfDirectoryAtPath:[stringPath stringByAppendingPathComponent:@"newFile.text"] error:nil];

    

    //--------NSFileHandle-------

    //创建一个NSFileHandle

    NSFileHandle *fileHandle = nil;

    

    //指定要操作文件的路径 更新

    fileHandle=[NSFileHandle fileHandleForWritingAtPath :@"/Users/a11/Desktop/we.txt"];

    

    //指定光标在文件内容末尾

    [fileHandle seekToEndOfFile];

    

    //创建需要修改的内容

    NSString *appendString = @"杨茹";

    

    //转换成数据流格式

    NSData *appendData = [appendString dataUsingEncoding:NSUTF8StringEncoding];

    

    //写入到文件中

    [fileHandle writeData:appendData];

    

    //关闭文件

    [fileHandle closeFile];



 //--------归档-------

    //创建一个可变数据流

    NSMutableData *mutableData = [[NSMutableData alloc]init];

    

    //把用归档格式的数据传值给可变大小的文件流

    NSKeyedArchiver *archiever = [[NSKeyedArchiver alloc]initForWritingWithMutableData:mutableData];

    

    //把集合数据以归档形式编码 键只能是NSString类型 Objectid类型

    [archiever encodeObject:@"80"forKey:@"age"];

    [archiever encodeObject:@"jack"forKey:@"name"];

    

    //完成归档

    [archiever finishEncoding];

    

    //把归档过来的可变大小的数据流写入文件中 永久存储

    [mutableData writeToFile:@"/Users/a11/Desktop/we.txt" atomically:YES];

    

    

    //--------解档-------

    //创建一个NSFileManager类型的对象

    NSFileManager *fileManager = [NSFileManager defaultManager];

    //NSData文件流接受从PATH路径读取出来的文件内容

    NSData *data = [fileManager contentsAtPath:@"/Users/a11/Desktop/we.txt"];

    

    //实例化一个解档对象 注意:初始化为解档格式并要放入要解档的数据流

    NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];

    

    //输入要解档的Key  返回的时数组类型

    NSArray *arrayUnArchiver = [unArchiver decodeObjectForKey:@"age"];

    

    NSLog(@"arrayUnArchiver:%@",arrayUnArchiver);


其他一些文件操作的方法:

NSFileManager 常⽤用⽂文件操作⽅方法

-(BOOL)contentsAtPath:path 从⽂文件中读取数据

-(BOOL)createFileAtPath:path contents:(BOOL)data attributes:向一个文件写⼊入数据

-(BOOL)removeFileAtPath: path handler: handler 删除⼀一个⽂文件

-(BOOL)movePath: from toPath: to handler: handler 重命名或移动⼀一个⽂文件(to可能已经存在)

-(BOOL)copyPath:from toPath:to handler: handler 复制⽂文件 (to不能 在)

-(BOOL)contentsEqualAtPath:path1 andPath:path2 ⽐比较两个⽂文件的内容

-(BOOL)fileExistsAtPath:path 测试⽂文件是否存在

-(BOOL)isReadablefileAtPath:path 测试⽂文件是否存在,且是否能执⾏行读操作

-(BOOL)isWritablefileAtPath:path 测试⽂文件是否存在,且是否能执⾏行写操作

-(NSDictionary *)fileAttributesAtPath:path traverseLink:(BOOL)flag 获取⽂文件的属性

-(BOOL)changeFileAttributes:attr atPath:path 更改⽂文件的属性 

(NSString *)currentDirectoryPath 获取当前目录

-(BOOL)changeCurrentDirectoryPath:path 更改当前目录

-(BOOL)copyPath:from toPath:to handler:handler 复制目录结构,to不能已经存在

-(BOOL)createDirectoryAtPath:path attributes:attr 创建目录

-(BOOL)fileExistsAtPath:path isDirectory:(BOOL *)flag 测试⽂文件是否为目录 (flag存储结构yes/no)

-(NSArray *)contentsOfDirectoryAtPath:path 列出目录的内容

-(NSDirectoryEnumerator *)enumeratorAtPath:path 枚举目录的内容

-(BOOL)removeFileAtPath:path handler:handler 删除空目录

-(BOOL)movePath:from toPath:to handler:handler 重命名或移动⼀个目录,to不能是已经存在的 


常⽤用NSFileHandle⽅方法

(NSFileHandle *)fileHandleForReadingAtPath:path 打开一个文件准备读取

(NSFileHandle *)fileHandleForWritingAtPath:path 打开一个文件准备写入

(NSFileHandle *)fileHandleForUpdatingAtPath:path 打开一个文件准备更新(读取和写⼊)

-(NSData *)availableData 从设备或通道返回可用数据

-(NSData *)readDataToEndOfFile 读取其余的数据直到文件末尾(最多UINT_MAX字节) 

-(NSData *)readDataOfLength:(unsigned int)bytes 从⽂件读取指定数目bytes的内容

-(void)writeData:data data写⼊文件

-(unsigned long long) offsetInFile 获取当前⽂件的偏移量

-(void)seekToFileOffset:offset 设置当前⽂件的偏移量

-(unsigned long long) seekToEndOfFile 将当前⽂件的偏移量定位的⽂件末尾

-(void)truncateFileAtOffset:offset 将⽂件的长度设置为offset字节

-(void)closeFile 关闭文件 








易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!