文件和目录管理
1:什么文件和目录管理
文件目录管理:就是指文件和目录的创建,目录的遍历,文件目录的复制,剪切,删除等
2:文件管理器对象的创建(单例对象)
NSFileManager * fm = [NSFileManager defaultManager];
//文件管理器的创建
void createFileManage(void){
//fileManage对象一旦创建完成后,后续所有的文件操作都是通过fileManage进行操作的
NSFileManager *fileManage = [NSFileManager defaultManager];//创建一个单例类的对象
}
3:文件和目录的创建
//创建普通文件//如果两个文件的文件名相同时,创建成功,但是会用新文件覆盖旧的文件
- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;
//创建目录//第二个参数是:当自路径不存在时是否创建子路径
- (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error ;
//文件和目录的创建
void createFileAndDir(void){
NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径
NSFileManager *fileManage = [NSFileManager defaultManager];
//- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;
//作用:创建文件
//path:创建的文件路径
//data:创建文件开始时给文件添加内容,如果时nil,创建的文件就是空文件
//attr:文件属性
[fileManage createFileAtPath:[pathDesktop stringByAppendingString:@"/file.txt"] contents:nil attributes:nil];
//- (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
//作用:创建目录
//path:目录的路径
//createIntermediates:如果创建的路径的自路径不存在时,是否连同自路径一起创建
//attributes:文件属性
//error:如果创建失败,保存创建失败的原因
NSError *error = nil;
[fileManage createDirectoryAtPath:[pathDesktop stringByAppendingString:@"/dir/dir1"] withIntermediateDirectories:NO attributes:nil error:&error];
if (error) {
NSLog(@"创建目录失败 : %@", [error localizedFailureReason]);
}
}
4:目录的遍历(traverse)
//浅度遍历
- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;
//深度遍历
- (NSArray *)subpathsOfDirectoryAtPath:(NSString *)path error:(NSError **)error
//目录的遍历
void traverseDir(void){
NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径
NSFileManager *fileManage = [NSFileManager defaultManager];
//- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
//作用:浅层遍历,只能遍历一层
NSArray *arrayContent = [fileManage contentsOfDirectoryAtPath:[pathDesktop stringByAppendingString:@"/dir"] error:nil];
NSLog(@"%@", arrayContent);
//- (NSArray *)subpathsOfDirectoryAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
//作用:深层遍历,一直遍历到最后一层
NSArray *arraySub = [fileManage subpathsOfDirectoryAtPath:[pathDesktop stringByAppendingString:@"/dir"] error:nil];
NSLog(@"%@", arraySub);
}
5:复制文件和目录
//srcPath:原文件路径
//dstPath:新文件路径
- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error ;
//复制文件或目录
void copyFileAndDir(void){
NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径
NSFileManager *fileManage = [NSFileManager defaultManager];
//- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
//作用:文件或目录的复制
//复制文件
[fileManage copyItemAtPath:[pathDesktop stringByAppendingString:@"/file.txt"] toPath:[pathDesktop stringByAppendingString:@"/dir/fileCopy.txt"] error:nil];、
[fileManage copyItemAtPath:[pathDesktop stringByAppendingString:@"/dir/dir1"] toPath:[pathDesktop stringByAppendingString:@"/dir1Copy"] error:nil];
}
6:剪切(cut)文件和目录
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error ;
//剪切文件或目录
void cutFileAndDir(void){
NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径
NSFileManager *fileManage = [NSFileManager defaultManager];
//- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
//作用:剪切文件或目录
[fileManage moveItemAtPath:[pathDesktop stringByAppendingString:@"/file.txt"] toPath:[pathDesktop stringByAppendingString:@"/dir/dir1/fileCut.txt"] error:nil];
}
7:删除文件和目录
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error;
//删除文件或目录
void deleteFileAndDir(void){
NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径
NSFileManager *fileManage = [NSFileManager defaultManager];
//- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
//作用:删除文件或目录
[fileManage removeItemAtPath:[pathDesktop stringByAppendingString:@"/file.txt"] error:nil];
}
8:获取文件属性(attribute)
- (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error;
//获取文件的属性
void getAttribute(void){
NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径
NSFileManager *fileManage = [NSFileManager defaultManager];//创建单例对象
//- (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
//作用:获取文件或目录的相关属性
NSDictionary *dictionaryFile = [fileManage attributesOfItemAtPath:[pathDesktop stringByAppendingString:@"/file.txt"] error:nil];
NSDictionary *dictionaryDir = [fileManage attributesOfItemAtPath:[pathDesktop stringByAppendingString:@"/dir"] error:nil];
NSLog(@"%@", dictionaryFile);
NSLog(@"%@", dictionaryDir);
}
9:判断文件是否存在
- (BOOL)fileExistsAtPath:(NSString *)path;
//判断文件是否存在
void isHaveFileOrDir(void){
NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径
NSFileManager *fileManage = [NSFileManager defaultManager];//创建单例对象
if ([fileManage fileExistsAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]]) {
NSLog(@"有这个文件");
} else {
NSLog(@"没有这个文件");
}
}
文件操作
1:什么是文件操作
文件操作:就是指对文件的打开,文件内容的读、写、设置偏移量和同步
2:文件的打开
//以只读方式打开
+ (id)fileHandleForReadingAtPath:(NSString *)path;
//以只写方式打开
+ (id)fileHandleForWritingAtPath:(NSString *)path;
//以读写方式打开
+ (id)fileHandleForUpdatingAtPath:(NSString *)path;
//文件的打开
void openFile(void){
//注意:NSFileHandle对象创建完成后,后续所有对文件内的操作都是通过NSFileHandle对象来完成的
NSString *pathDesktop = @"/Users/mac/Desktop";
//+ (id)fileHandleForReadingAtPath:(NSString *)path;
//作用:以只读的方式打开文件
NSFileHandle *fileHandleRead = [NSFileHandle fileHandleForReadingAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]];
//+ (id)fileHandleForWritingAtPath:(NSString *)path;
//作用:以只写的方式打开文件
NSFileHandle *fileHandleWrite = [NSFileHandle fileHandleForWritingAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]];
//+ (id)fileHandleForUpdatingAtPath:(NSString *)path;
//作用:以读写的方式打开文件
NSFileHandle *fileHandleUp = [NSFileHandle fileHandleForUpdatingAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]];
}
3:文件内容的读取
1:读取指定长度的数据
- (NSData *)readDataOfLength:(NSUInteger)length;
2:从当前偏移量读到文件末尾
- (NSData *)readDataToEndOfFile;
//文件内容的读取
void readFile(void){
NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]];//以读写的方式打开文件
#if 0
//- (NSData *)readDataOfLength:(NSUInteger)length;
//作用:读取文件中指定长度的数据
NSData *dataFromFile = [fileHandle readDataOfLength:6];
NSString *stringFromData = [[NSString alloc] initWithData:dataFromFile encoding:NSUTF8StringEncoding];//把data转换成string
NSLog(@"%@", stringFromData);
#endif
//- (NSData *)readDataToEndOfFile;
//作用:读取文件中所有的数据
NSData *dataFromFile = [fileHandle readDataToEndOfFile];
NSString *stringFromData = [[NSString alloc] initWithData:dataFromFile encoding:NSUTF8StringEncoding];
NSLog(@"%@", stringFromData);
}
4:写文件
- (void)writeData:(NSData *)data;
//向文件中写数据
void writeDataToFile(void){
NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]];//以读写的方式打开文件
NSString *string = @"chen chao zui shuai";
NSData *dataFromString = [string dataUsingEncoding:NSUTF8StringEncoding];//将string转换成data
//- (void)writeData:(NSData *)data;
//作用:向文件中写数据(覆盖之前内容)
[fileHandle writeData: dataFromString];
//思考:文件末尾出写入@"chen chao ni zui shuai"
NSLog(@"%@", [[NSString alloc] initWithData:[fileHandle readDataOfLength:5] encoding:NSUTF8StringEncoding]);
}
5:设置文件偏移量
1:将文件偏移量设置到文件中的指定位置
- (void)seekToFileOffset:(unsigned long long)offset;
2:将文件偏移量设置到文件末尾
- (unsigned long long)seekToEndOfFile;
//设置文件偏移量
void setFileSeek(void){
NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]];//以读写的方式打开文件
[fileHandle seekToFileOffset:5];//设置文件偏移量到指定位置
[fileHandle seekToEndOfFile];//设置文件偏移量到文件末尾
NSLog(@"%@", [[NSString alloc] initWithData:[fileHandle readDataOfLength:4] encoding:NSUTF8StringEncoding]);
}