iOS 中文件管理器的使用
援引:https://www.jianshu.com/p/1ee2619137f9
文章之前,我们先来看下本文的知识大纲:
1.NSFileManager和NSFilehandle的概念 1.NSFileManager 是 Foundation 框架中用来管理和操作文件、目录等文件系统相关联内容的类。 2.NSFileHandle类:它需要配合NSFileManager文件管理类,对文件内容进行操作,写入数据、读取数据。 2.NSFileManager和NSFileHandle的配合使用,实现文件的增删改查等功能 2.1 拿到沙盒的Document路径(通常默认放在这个路径下) // 拿到沙盒路径 -(NSString*)getDocumentPath { // @expandTilde 是否覆盖 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; return documentsDirectory; } 2.2 创建文件夹,并且判断是否创建成功 NSString *documentsPath =[self getDocumentPath]; NSFileManager *fileManager = [NSFileManager defaultManager];// NSFileManager 是 Foundation 框架中用来管理和操作文件、目录等文件系统相关联内容的类。 NSString * testDirectory = [documentsPath stringByAppendingPathComponent:@"日记"]; BOOL res = [fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil]; if (res) { NSLog(@"文件夹创建成功"); }else { NSLog(@"文件夹创建失败"); } 2.3 创建文件,并判断文件是否创建 NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"]; BOOL res1 = [fileManager createFileAtPath:testPath contents:nil attributes:nil]; if (res1) { NSLog(@"文件创建成功: %@" ,testPath); }else { NSLog(@"文件创建失败"); } 2.4 写入文件,并判断文件是否存在 NSString * str = @"你是一位好同志"; BOOL res2 = [str writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; if (res2) { NSLog(@"文件写入成功"); }else { NSLog(@"文件写入失败"); } // 判断文件是否存在 if ([fileManager fileExistsAtPath:testPath]) { NSLog(@" 是否存在 "); } 2.5 追加写入内容 // 追加内容 NSFileHandle * handFile = [NSFileHandle fileHandleForUpdatingAtPath:testPath]; //NSFileHandle类:它需要配合NSFileManager文件管理类,对文件内容进行操作,写入数据、读取数据。 [handFile seekToEndOfFile];// 文件光标移动末尾 NSString * str1 = @"追加内容";// 追加内容 NSData * data = [str1 dataUsingEncoding:NSUTF8StringEncoding];// 转换文件格式 [handFile writeData:data];// 写入文件 [handFile closeFile];// 关闭 2.6 删除文件,并判断文件是否删除 // 删除文件 BOOL isOK = [fileManager removeItemAtPath:testPath error:nil]; if (isOK) { NSLog(@"-- 成功删除---"); } 2.7 拷贝文件 // 拷贝文件 NSString *targetPath = [testDirectory stringByAppendingPathComponent:@"test1.txt"]; //目标文件路径 [fileManager copyItemAtPath:testPath toPath:targetPath error:nil]; // 拷贝文件 2.8 移动文件 [fileManager moveItemAtPath:testPath toPath:targetPath error:nil]; 2.9 读取文件 NSString * content = [NSString stringWithContentsOfFile:testPath encoding:NSUTF8StringEncoding error:nil]; NSLog(@"拿到文章的内容 -- %@",content); 2.10 计算文件大小 // 计算文件大小 - (unsigned long long)fileSizeAtPath:(NSString *)filePath { NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL isExist = [fileManager fileExistsAtPath:filePath]; if (isExist) { unsigned long long fileSize = [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize]; return fileSize; } else { NSLog(@"file is not exist"); return 0; } } 2.11 计算文件夹大小 // 计算整个文件夹中所有文件大小 - (unsigned long long)folderSizeAtPath:(NSString*)folderPath { NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL isExist = [fileManager fileExistsAtPath:folderPath]; if (isExist) { NSEnumerator *childFileEnumerator = [[fileManager subpathsAtPath:folderPath] objectEnumerator]; unsigned long long folderSize = 0; NSString *fileName = @""; while ((fileName = [childFileEnumerator nextObject]) != nil){ NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName]; folderSize += [self fileSizeAtPath:fileAbsolutePath]; } return folderSize / (1024.0 * 1024.0); } else { NSLog(@"file is not exist"); return 0; } } 3.NSString、UIImage 和 NSData的相互转换 3.1 NSString 和 NSData转换 NSString * string = @"123456"; NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding]; //NSString 转换为NSData NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];////NSData 转换为NSString 3.2 UIImage 和 NSData转换 //NSData转换为UIImage NSString * imagePath = @"/Users/yyf/Desktop/ios中文件管理器的使用.png"; NSData *imageData = [NSData dataWithContentsOfFile: imagePath]; UIImage *image = [UIImage imageWithData: imageData]; //UIImage转换为NSData NSData *imageData1 = UIImagePNGRepresentation(image); 3.路径各个分段的查询 NSString * path = @"/Doc/work/diary"; NSArray * array = [path pathComponents];//文件的各个部分 NSString * lastName = [path lastPathComponent];//文件的最后一个部分 NSString * deleteName = [path stringByDeletingLastPathComponent];// 文件删除最后一个部分 NSString * appendName = [path stringByAppendingPathComponent:@"cy.jpg"];// 文件追加一个部分 NSLog(@"获得所有文件%@\n 获得最后文件%@\n 删除之后的名称%@\n追加名称%@\n",array,lastName,deleteName,appendName);
附上代码地址:
Demo地址
[end]
关于ios中文件管理器的使用介绍到这里。