004-文件管理与文件操作
第一部分:文件管理(文件管理类:NSFileManager -- 单例)
1 // 获取文件管理器 2 NSFileManager *fm = [NSFileManager defaultManager]; 3 4 // 1.获取文件的所有属性 5 NSString *path2 = @"/Users/aplle/Desktop/test.txt"; 6 NSError *error2 = nil; 7 NSDictionary *dic = [fm attributesOfItemAtPath:path2 error:&error2]; 8 if (error2 != nil) { 9 NSLog(@"error2 = %@", error2); 10 } else { 11 NSLog(@"dic = %@", dic); 12 } 13 14 // 2.浅度遍历文件路径下的所有文件(一级遍历:文件夹和文件) 15 NSString *path3 = @"/Users/aplle/Desktop"; 16 NSError *error3 = nil; 17 NSArray *array1 = [fm contentsOfDirectoryAtPath:path3 error:&error3]; 18 19 // 3.深度遍历文件路径下的所有文件(逐级遍历:文件夹和文件) 20 NSString *path4 = @"/Users/aplle/Desktop/lidong"; 21 NSError *error4 = nil; 22 NSArray *array2 = [fm subpathsOfDirectoryAtPath:path4 error:&error4]; 23 24 // 4.创建文件夹 25 NSString *path5 = @"/Users/aplle/Desktop/Frank"; 26 NSError *error5 = nil; 27 // 参数:withIntermediateDirectories 是否补充创建文件夹 28 BOOL isCreateSucces = [fm createDirectoryAtPath:path5 withIntermediateDirectories:YES attributes:nil error:&error5]; 29 if (isCreateSucces) { 30 NSLog(@"创建文件夹成功"); 31 } else { 32 NSLog(@"error5 = %@", error5); 33 } 34 35 // 5.移动目录(将Frank文件夹下的所有文件移动到newFrank文件夹里面) 36 // 如果不存在newFrank文件夹,系统会自动创建 37 NSString *fromPath1 = @"/Users/aplle/Desktop/Frank"; 38 NSString *toPath1 = @"/Users/aplle/Desktop/newFrank"; 39 NSError *error6 = nil; 40 BOOL isMoveSuccess = [fm moveItemAtPath:fromPath1 toPath:toPath1 error:&error6]; 41 if (isMoveSuccess) { 42 NSLog(@"移动成功!"); 43 } else { 44 NSLog(@"error6 = %@", error6); 45 } 46 47 // 6.删除文件(删除newFrank整个文件夹) 48 NSString *path7 = @"/Users/aplle/Desktop/newFrank"; 49 NSError *error7 = nil; 50 BOOL isRemoveSuccess = [fm removeItemAtPath:path7 error:&error7]; 51 if (isRemoveSuccess) { 52 NSLog(@"删除成功!"); 53 } else { 54 NSLog(@"error7 = %@", error7); 55 } 56 57 // 7.拷贝文件(将Frank中的所有文件拷贝到newFrank文件夹中) 58 NSString *fromPath2 = @"/Users/aplle/Desktop/Frank"; 59 NSString *toPath2 = @"/Users/aplle/Desktop/newFrank"; 60 NSError *error8 = nil; 61 BOOL isCopySuccess = [fm copyItemAtPath:fromPath2 toPath:toPath2 error:&error8]; 62 if (isCopySuccess) { 63 NSLog(@"拷贝成功!"); 64 } else { 65 NSLog(@"error8 = %@", error8); 66 }
第二部分:文件操作(文件句柄类:NSFileHandle)
一、文件打开方式
1.以只读方式打开 + (id)fileHandleForReadingAtPath:(NSString *)path;
2.以只写方式打开 + (id)fileHandleForWritingAtPath:(NSString *)path;
3.以读写方式打开 + (id)fileHandleForUpdatingAtPath:(NSString *)path;
1 // 文件路径 2 NSString *path = @"/Users/aplle/Desktop/Frank/test.txt"; 3 4 // 1.以只读方式打开文件 5 NSFileHandle *handle1 = [NSFileHandle fileHandleForReadingAtPath:path]; 6 if (handle1 == nil) { 7 NSLog(@"打开失败!"); 8 } else { 9 NSLog(@"打开成功!"); 10 } 11 12 // 2.以只写方式打开文件 13 NSFileHandle *handle2 = [NSFileHandle fileHandleForWritingAtPath:path]; 14 if (handle2 == nil) { 15 NSLog(@"打开失败!"); 16 } else { 17 NSLog(@"打开成功!"); 18 } 19 20 // 3.以读写方式打开文件 21 NSFileHandle *handle3 = [NSFileHandle fileHandleForUpdatingAtPath:path]; 22 if (handle3 == nil) { 23 NSLog(@"打开失败!"); 24 } else { 25 NSLog(@"打开成功!"); 26 }
二、读写文件
读写文件最终都是NSData类型的二进制数据。
1.读文件
1) 读指定长度的数据 - (NSData *)readDataOfLength:(NSUInteger)length;
2)从当前偏移量读到文件尾 - (NSData *)readDataToEndOfFile;
3)设置文件指针偏移量 - (void)seekToFileOffset:(unsigned long long)offset;
4)将文件偏移量定位到文件尾 - (unsigned long long)seekToEndOfFile;
1 // 文件路径 2 NSString *path = @"/Users/aplle/Desktop/Frank/test.txt"; 3 // 以只读方式打开文件 4 NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:path]; 5 if (handle != nil) { 6 // 1.读取指定长度的数据 7 // 从当前文件指针开始往后读取指定长度的字节,读完以后文件指针就会在指定长度处 8 NSData *data1 = [handle readDataOfLength:5]; 9 NSLog(@"data = %@", data1); 10 11 // 2.从当前偏移量读到文件末尾 12 NSData *data2 = [handle readDataToEndOfFile]; 13 14 // 3.设置文件指针偏移量(文件指针回归起始位) 15 [handle seekToFileOffset:0]; 16 17 // 4.将文件指针移到文件末尾 18 [handle seekToEndOfFile]; 19 }
2.写文件
1)句柄操作 - (void)writeData:(NSData *)data;
2)字符串操作 - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;
3)NSData操作 - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
1 // 文件路径 2 NSString *path = @"/Users/aplle/Desktop/Frank/test.txt"; 3 // 以读写方式打开 4 NSFileHandle *handle = [NSFileHandle fileHandleForUpdatingAtPath:path]; 5 if (handle != nil) { 6 // 1.逐个字节地写(写完一个字节,文件指针也就会跟着往后偏移一个字节) 7 NSString *str1 = @"Welcome to beijing!"; 8 NSData *data1 = [str1 dataUsingEncoding:NSUTF8StringEncoding]; 9 [handle writeData:data1]; 10 11 // 2.以字符串写入(最终还是将字符串转化为了NSData) 12 NSString *str2 = @"Welcome to Wuhan!"; 13 NSError *error = nil; 14 BOOL isWriteSuccess2 = [str2 writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error]; 15 if (isWriteSuccess2) { 16 NSLog(@"写入文件成功!"); 17 } else { 18 NSLog(@"写入文件失败!"); 19 } 20 21 // 3.以NSData类型写入 22 NSString *str3 = @"Welcome to Huanggang !"; 23 NSData *data3 = [str3 dataUsingEncoding:NSUTF8StringEncoding]; 24 BOOL isWriteSuccess3 = [data3 writeToFile:path atomically:YES]; 25 if (isWriteSuccess3) { 26 NSLog(@"写入文件成功!"); 27 } else { 28 NSLog(@"写入文件失败!"); 29 } 30 }
三、NSData与NSString之间的转换
1 // 1.NSString ---> NSData 2 NSString *str1 = @"Welcome to Shenzhen !"; 3 NSData *data = [str1 dataUsingEncoding:NSUTF8StringEncoding]; 4 5 // 2.NSString ---> NSData 6 NSString *str2 = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

浙公网安备 33010602011771号