文件的基本操作
//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哈!