文件操作
【说明】
文件操作可以分为两类
文件本身的操作:创建、删除、移动、拷贝等
文件内容的操作:读、写等
读:磁盘 —> 内存
写:内存 —> 磁盘
一、文件管理类(NSFileManager)
1、创建文件管理器单例对象
NSFileManager *fm = [NSFileManager defaultManager];
2、遍历目录下的内容
//浅度遍历指定目录
NSError * __autoreleasing error = nil;
NSArray *ary = [fm contentsOfDirectoryAtPath:@"/test" error:&error];
//该方法若出错会创建一个NSError类型的对象,然后用传递过来的error指针指向该对象
if (error) {
NSLog(@"%@", error);
}
//深度遍历指定目录
NSArray *ary2 = [fm subpathsOfDirectoryAtPath:PATH error:nil];
NSArray *ary2 = [fm subpathsAtPath:PATH];
3、创建文件或目录
//创建文件,若创建的文件已存在,则会覆盖
BOOL ret = [fm createFileAtPath:PATH contents:nil attributes:nil];
//创建文件夹,若文件夹已经存在,则不会覆盖
/*
参数1:创建的目录
参数2:是否创建中间目录
参数3:要创建的目录的属性
参数4:出错处理
*/
ret = [fm createDirectoryAtPath:PATH2 withIntermediateDirectories:YES attributes:nil error:nil];
if (ret == YES) {
NSLog(@"目录创建成功");
} else {
NSLog(@"目录创建失败");
}
4、拷贝文件或目录
//拷贝文件或目录
BOOL ret = [fm copyItemAtPath:SRC toPath:DST error:nil];
if (ret == YES) {
NSLog(@"拷贝成功");
} else {
NSLog(@"拷贝失败");
}
5、移动文件或目录
//移动文件或目录
BOOL ret = [fm moveItemAtPath:SRC toPath:DST error:nil];
if (ret == YES) {
NSLog(@"移动成功");
} else {
NSLog(@"移动失败");
}
6、删除文件或目录
BOOL ret = [fm removeItemAtPath:PATH error:nil];
7、获取文件属性
NSDictionary *attr = [fm attributesOfItemAtPath:PATH2 error:nil];
8、判断文件是否存在
ret = [fm fileExistsAtPath:PATH2];
9、判断文件是否存在,是否是目录
BOOL isDir = NO;
ret = [fm fileExistsAtPath:PATH2 isDirectory:&isDir];
二、文件句柄类(NSFileHandle)
1、打开文件方式(默认位置在文件开头)
//已只读方式打开文件
NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:PATH];
//以只写方式打开文件
NSFileHandle *fh2 = [NSFileHandle fileHandleForWritingAtPath:PATH];
//以读写方式打开
NSFileHandle *fh3 = [NSFileHandle fileHandleForUpdatingAtPath:PATH];
2、从当前偏移量读取到文件尾
NSData *data = [fh readDataToEndOfFile];
3、读取指定长度的数据(单位是字节)
NSData *data = [fh readDataOfLength:5];
4、设置文件偏移量(单位是字节)
[fh seekToFileOffset:10];
5、设置文件偏移量至文件尾
[fh seekToEndOfFile];
6、将文件的长度设置为offset大小(截断文件)
[fh3 truncateFileAtOffset:20];
7、将数据写入到文件
[fh2 writeData:data];
三、plist文件(Property List)
【认识plist文件】
1、属性列表文件,只能存放NSString/NSArray/NSDictionary/NSNumber/BOOL/NSData/NSDate对象,根对象只能是NSArray或NSDictionary
2、可视化的文件,只能存放小数据(登陆信息)
【plist文件创建】
1、使用Xcode创建
file —> new —> file —> resource —> property list
2、使用程序创建
BOOL ret = [dic writeToFile:PATH atomically:NO];
【读取plist文件】
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:PATH];
NSDictionary *dic = [[NSDictionary alloc] initWithContentsOfFile:PATH];
四、二进制数据类(NSData)
1、NSString转NSData
NSData *data2 = [str dataUsingEncoding:NSUTF8StringEncoding];
2、NSData转NSString
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
五、NSNull类
//空对象,可以占一个位置,因为nil表示结束标志
NSNull *null = [NSNull null];
NSArray *ary = [[NSArray alloc] initWithObjects:@"one",@"123",null,@"two", nil];
Nil: A null pointer to an Objective-C class.表示对类进行赋空值
NULL: A null pointer to anything else, is for C-style memory pointers. 用于对非对象指针赋空值,比如C指针
NSNull 对于像NSArray这样的类型,nil或NULL不能做为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,则可以用[NSNULL null】返回的对象来初始化NSArray中的内容
nil 是对objective c id 对象赋空值
练习题:
1、编写一个程序,将一个目录下的文件分类管理
a、用每个文件的后缀创建对应全大写目录,将同类文件移动到对应的目录。
如:1.txt文件,创建TXT目录,将1.txt移动到该目录
b、将没有后缀的文件移动到Others目录
c、将目录移动到subDir目录中
2、实现文件的拷贝功能,要求用读写形式
提示:要考虑大文件操作