iOS 文件操作
程序员文章站
2022-04-12 20:30:01
文件的基本操作
//NSFileManager 文件管理器类 用于操作文件或目录
NSFileManager *file = [NSFileManager defa...
文件的基本操作
//NSFileManager 文件管理器类 用于操作文件或目录
NSFileManager *file = [NSFileManager defaultManager]; NSFileManager *file2 = [NSFileManager defaultManager];
//通过验证NSFileManager是一个单例类
NSLog(@"file=%p,file2=%p",file,file2);
//1. 遍历文件路径: 浅度遍历、深度遍历
//a. 浅度遍历: 只遍历当前这一层的文件夹的所有文件或目录 NSError *error = nil; NSArray *arr = [file contentsOfDirectoryAtPath:PATH error:&error]; if(error){ //判断如果error有值,则打印错误 NSLog(@"error = %@",error); }else{ //没有错误,则打印获取的信息 NSLog(@"arr = %@",arr); } //b.深度遍历:遍历当前层与当前层下的子层 arr = [file subpathsOfDirectoryAtPath:PATH error:&error]; if(error){ NSLog(@"error = %@",error); }else{ NSLog(@"arr = %@",arr); }
//2.创建文件或目录
//a. 创建文件路径: createFileAtPath //判断文件是否已存在:fileExistsAtPath BOOL bval = [file fileExistsAtPath:CREATE_FILE]; if(bval){ //返回值:YES 文件存在 NO 不存在 NSLog(@"文件已存在"); }else{ //参数1:文件路径 参数2:内容(nil) 参数3:属性(nil) bval = [file createFileAtPath:CREATE_FILE contents:nil attributes:nil]; if(bval){ //返回值: YES 成功 NO 失败 NSLog(@"文件创建成功"); }else{ NSLog(@"文件创建失败"); } }
//b.创建目录路径:
bval = [file fileExistsAtPath:CREATE_PATH]; if(bval){ //返回值:YES 目录存在 NO 不存在 NSLog(@"目录已存在"); }else{ //参数1:路径 参数2:中间路径(YES) 参数3:属性(nil) 参数4:错误 bval = [file createDirectoryAtPath:CREATE_PATH withIntermediateDirectories:YES attributes:nil error:nil]; if(bval){ NSLog(@"目录创建成功"); }else{ NSLog(@"目录创建失败"); } }
//获取路径的属性
NSDictionary *dic = [file attributesOfItemAtPath:CREATE_FILE error:nil]; NSLog(@"dic = %@",dic); //NSNumber: 数字类 专门存储数字的类 NSNumber *numA = dic[@"NSFileSize"]; NSNumber *numB = @5; //直接初始化数字类 NSLog(@"fileSize = %@,numB = %@",numA,numB); //间接初始化数字类: 对象方法、类型方法 //通过一个整型,初始化数字类对象方法 NSNumber *numC = [[NSNumber alloc] initWithInt:6]; NSLog(@"numC=%@",numC); //通过一个浮点型,初始化数字类类方法 NSNumber *numD = [NSNumber numberWithFloat:4.5]; NSLog(@"numD=%@",numD);
文件的拷贝 移动 删除
NSFileManager *file = [NSFileManager defaultManager]; //参数1:源路径 参数2: 目标路径 参数3:错误提示
//1. 文件或目录的拷贝:
//拷贝时:源文件存在,目标文件不存在,才能拷贝成功 NSError *error = nil; if([file fileExistsAtPath:DST_PATH]) { NSLog(@"目标文件存在,无须拷贝"); }else{ [file copyItemAtPath:SRC_PATH toPath:DST_PATH error:&error]; if(error){ NSLog(@"error = %@",error); }else{ NSLog(@"拷贝成功"); } }
//2. 文件或目录的移动:
//移动时:源文件存在,目标文件不存在,才能移动成功 if([file fileExistsAtPath:SRC_PATH]&&![file fileExistsAtPath:DST_PATH]) { [file moveItemAtPath:SRC_PATH toPath:DST_PATH error:&error]; if(error){ NSLog(@"error = %@",error); }else{ NSLog(@"文件的移动成功"); } }else{ NSLog(@"不能确保源文件存在,目标文件不存在"); }
//3. 删除
//删除时:指定的文件存在,即可删除成功成功 [file removeItemAtPath:DEL_PATH error:&error]; if(error){ NSLog(@"error=%@",error); }else{ NSLog(@"删除成功"); }
//test
NSFileManager *file = [NSFileManager defaultManager]; NSArray *array = [file contentsOfDirectoryAtPath:PATH error:nil]; NSLog(@"array = %@",array); for (NSString *obj in array) { //if([obj hasSuffix:@"png"]) //[obj pathExtension]: 求文件扩展名 if([[obj pathExtension] isEqualToString:@"png"]) { //stringByAppendingPathComponent:字符串文件路径的拼接 NSString *path = [PATH stringByAppendingPathComponent:obj]; if([file removeItemAtPath:path error:nil]) { NSLog(@"%@删除成功",obj); } } }
文件的读写
//NSFileHandle 文件句柄类,用于操作文件内容(读/写) //fileHandleForReadingAtPath: 以只读方式获取句柄对象 //fileHandleForWritingAtPath: 以只写方式获取句柄对象 //fileHandleForUpdatingAtPath: 以读写方式获取句柄对象(推荐) //获取文件句柄的对象 NSFileHandle *handle = [NSFileHandle fileHandleForUpdatingAtPath:FILE_P]; if(handle){ //如果获取句柄对象有值,则可进行读写文件
//-------读--------
//读取指定长度的内容,存储到NSData: readDataOfLength //默认情况下,读取文件的指定位置从起始位置开始 //设置偏移位置; 默认位置为0 [handle seekToFileOffset:3]; //偏移到文件末尾 //[handle seekToEndOfFile]; //NSData: 二进制数据流类(非文本文件必须用NSData,如视图流。。) NSData *data = [handle readDataOfLength:5]; //从指定位置读取文件内容,一直到末尾:readDataToEndOfFile NSData *data2 = [handle readDataToEndOfFile]; //NSData转NSString NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"str = %@",str); NSString *str2 = [[NSString alloc] initWithData:data2 encoding:NSUTF8StringEncoding]; NSLog(@"str2 = %@",str2);
//————–写————-
NSString *str3 = @"hello_1605"; //NSString转NSData NSData *data3 = [str3 dataUsingEncoding:NSUTF8StringEncoding]; //将游标偏移位置起始位置 [handle seekToFileOffset:0]; [handle writeData:data3]; //将数据流写入文件中 }
//文本文件的读写操作
//参数1:路径 参数2:编码 参数3: 错误 //---读取文件--- NSString *str = [NSString stringWithContentsOfFile:PATH encoding:NSUTF8StringEncoding error:nil]; NSLog(@"str = %@",str); //-----写入文件------ NSString *str2 = @"hello world!"; //字符串写入后,替换原先文件中的内容 if([str2 writeToFile:PATH atomically:YES]) { NSLog(@"文件写入成功"); }
test
NSFileManager *file = [NSFileManager defaultManager];
//1. 创建目录
if([file fileExistsAtPath:DIR_PATH]) { NSLog(@"该目录已存在"); }else{ BOOL bval =[file createDirectoryAtPath:DIR_PATH withIntermediateDirectories:YES attributes:nil error:nil]; if(bval){ NSLog(@"目录创建成功"); }else{ NSLog(@"目录创建失败"); return 0; } }
//2. 将字符串写入到目录所在的文件中
NSString *str = @"I am a handsome man"; if([str writeToFile:FILE_PATH atomically:YES]) { NSLog(@"文件写入成功"); }else{ NSLog(@"文件创建失败"); }
//3. 读取文件中的内容
NSFileHandle *handle = [NSFileHandle fileHandleForUpdatingAtPath:FILE_PATH]; if(handle){ //偏移7个字符串长度 [handle seekToFileOffset:7]; NSData *data = [handle readDataToEndOfFile]; NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"str = %@",str); }
plist文件操作
//plist: //1. 以列表的方式存储数据的文件 //2. 文件只能以数组或字典的类型进行存储 //3. 用字典的方式写入,则用字典的方式读 //用数组的方式写入,则用数组的方式读
//——-plist文件的写入——-
//1. 手动写入(新建文件-resource-property List-新建plist文件)
//写入时按字典类型写入,按字典类型进行接收 //---按字典方式读取---- //dictionaryWithContentsOfFile: 以字典方式读取plist文件的方法 NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:PATH]; NSLog(@"dic = %@",dic);
//2. 代码写入
NSNumber *numA = @333; NSArray *array = @[@"111",@"222",numA]; //writeToFile: 字典数组都用该方法写入数据到plist文件 if([array writeToFile:PLIST atomically:YES]) { NSLog(@"写入成功"); }else{ NSLog(@"写入失败"); }
//---按数组方式读取----
//arrayWithContentsOfFile: 以数组方式读取plist文件的方法 NSArray *array2 = [NSArray arrayWithContentsOfFile:PLIST]; NSLog(@"array = %@",array2);
总结
//1.单例 //a.概念:在程序的执行过程中,只初始化一次 //b.作用:节约内存; 共享内存,方便传值 //2.NSFileManage--文件管理器类--操作文件或目录 //常用方法: //a. 遍历: 深度/浅度遍历 //b. 创建文件/目录、 文件是否存在,获取属性 //c. 拷贝/移动/删除文件或目录 //3.NSfileHandle --文件句柄类--操作文件内容 //a.主要操作文件的读和写 //b.读写过程如何偏移 //c.NSData类与NSString间的转换 //4. 文本文件的读写操作 //a.直接通过字符串进行读写 //b.读取时只能读整体数据,写入时会覆盖文件的原始内容 //4.plist //a. 以列表的方式存储数据的文件 //b. 文件只能以数组或字典的类型进行存储 //c. 用字典的方式写入,则用字典的方式读 //用数组的方式写入,则用数组的方式读
如果这篇文章对你有帮助,记得点赞哦~O(∩_∩)O哈!