------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、NSFileManager介绍
NSFileManager是用来管理文件系统的 它可以用来进行常见的文件\文件夹操作(拷贝、剪切、创建等)
NSFileManager使用了单例模式singleton使用defaultManager方法可以获得那个单例对象[NSFileManager defaultManager]
二、NSFileManager基本使用方法
- (BOOL)fileExistsAtPath:(NSString *)path;
path这个文件或文件夹(目录)是否存在
- (BOOL)fileExistsAtPath:(NSString *)pathisDirectory:(BOOL *)isDirectory;
path这个文件或文件夹是否存在, isDirectory代表是否为文件夹
- (BOOL)isReadableFileAtPath:(NSString *)path;
path这个文件或文件夹是否可读
- (BOOL)isWritableFileAtPath:(NSString *)path;
path这个文件或文件夹是否可写
- (BOOL)isDeletableFileAtPath:(NSString *)path;
path这个文件或文件夹是否可删除
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//NSFileManager用于判断
NSString *filePath = @"/Users/zhaoxiaohu/Desktop/arr.plist";
NSString *filePath2 = @"/";
// 1) 判断文件是否存在
//创建文件管理对象
//调用defaultManager 创建一个文件管理的单例对象
//单例对象:在程序运行期间,只有一个对象存在
NSFileManager *fm = [NSFileManager defaultManager];
// YES 存在 NO不存在
BOOL isYES = [fm fileExistsAtPath:filePath];
NSLog(@"-->%d",isYES);
if(isYES){
BOOL isDir;
// 2) 判断是否是一个目录
[fm fileExistsAtPath:filePath isDirectory:&isDir];
if (isDir) {
NSLog(@"这是一个目录");
}else{
NSLog(@"这不是一个目录");
}
}
// 3) 判断文件是否可读
isYES = [fm isReadableFileAtPath:filePath];
// 4) 是否可写
isYES = [fm isWritableFileAtPath:filePath2];
// 5) 是否可删除
isYES = [fm isDeletableFileAtPath:filePath2];
NSLog(@"-->%d",isYES);
}
return 0;
}
三、NSFileManager文件访问
- (NSDictionary *)attributesOfItemAtPath:(NSString*)path error:(NSError **)error;
获得path这个文件\文件夹的属性
- (NSArray *)subpathsAtPath:(NSString *)path;
查找给定路径下的所有子路径,返回一个数组, 深度查找,不限于当前层,也会查找package的内容。
- (NSArray *)subpathsOfDirectoryAtPath:(NSString*)path error:(NSError **)error;
获得path的所有子路径(后代路径),上面两个方法功能一样。
- (NSArray *)contentsOfDirectoryAtPath:(NSString*)path error:(NSError **)error;
获得path的当前子路径(path下的所有直接子内容,path必须是一个目录)
- (NSData *)contentsAtPath:(NSString *)path;
获得文件内容
#import<Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建文件对象
NSFileManager *fm = [NSFileManager defaultManager];
NSString *filePath = @"/Users/zhaoxiaohu/Desktop/arr.plist";
NSString *dirPath = @"/Users/zhaoxiaohu/Desktop/a";
//1)如何获取文件的信息(属性)
NSDictionary *dict = [fm attributesOfItemAtPath:filePath error:nil];
NSLog(@"%@",dict);
NSLog(@"%@,%@",[dict objectForKey:@"NSFileOwnerAccountName"],dict[@"NSFileOwnerAccountName"]);
//2)获取指定目录下文件及子目录
//使用递归的方式获取当前目录及子目录下的所有的文件及文件夹
NSArray *subPaths = [fm subpathsAtPath:dirPath];
//subpathsOfDirectoryAtPath 不是使用递归的方式获取的
subPaths = [fm subpathsOfDirectoryAtPath:dirPath error:nil];
NSLog(@"subPaths = %@",subPaths);
//3)获取指定目录下的文件及目录信息(不在获取后代路径)
subPaths = [fm contentsOfDirectoryAtPath:dirPath error:nil];
NSLog(@"subPaths = %@",subPaths);
}
return 0;
}
四、NSFileManager文件操作
- (BOOL)createDirectoryAtPath:(NSString *)pathwithIntermediateDirectories:(BOOL) createIntermediates attributes:(NSDictionary*)attributes error:(NSError **)error;
只能创建文件夹(createIntermediates为YES代表自动创建中间的文件夹) 注意如果要创建的目录已经存在,则本次创建失败
- (BOOL)copyItemAtPath:(NSString *)srcPathtoPath:(NSString *)dstPath error:(NSError **)error;
拷贝,如果目标目录已经存在同名文件,则无法拷贝
- (BOOL)moveItemAtPath:(NSString *)srcPathtoPath:(NSString *)dstPath error:(NSError **)error;
移动(剪切)
- (BOOL)removeItemAtPath:(NSString *)patherror:(NSError **)error;
删除
- (BOOL)createFileAtPath:(NSString *)pathcontents:(NSData *)data attributes:(NSDictionary *)attr;
创建文件 (NSData是用来存储二进制字节数据的)
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建文件管理对象
NSFileManager *fm = [NSFileManager defaultManager];
//如何创建目录 (路径 :/Users/zhaoxiaohu/Desktop/aaa)
NSString *createDirPath = @"/Users/zhaoxiaohu/Desktop/aaa/ccc/bbb/love.txt";
// fm createDirectoryAtPath:@"路径"withIntermediateDirectories:YES/NO 创建路径的时候,YES自动创建路径中缺少的目录,NO的不会创建缺少的目录 attributes:属性的字典 error:错误对象
// BOOL isYES = [fmcreateDirectoryAtPath:createDirPath withIntermediateDirectories:YESattributes:nil error:nil];
//
// if (isYES) {
// NSLog(@"成功");
// }
//如何创建文件
NSString *str = @"每当我错过一个女孩,我就向山上放一块砖,于是就有了长城";
//writeToFile
// fm createFileAtPath:@"路径" contents: NSData类型的数据 attributes:文件的属性的字典
//创建NSData? 是一个处理二进制数据的类
//NSString -----> NSData
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
BOOL isYes;
// // createFileAtPath 创建文件
// isYes = [fmcreateFileAtPath:createDirPath contents:data attributes:nil];
// NSLog(@"isYes = %d",isYes);
//如何copy文件
// NSString *targetPath =@"/Users/zhaoxiaohu/Desktop/aaa/ccc/love.txt";
// [fm copyItemAtPath:createDirPathtoPath:targetPath error:nil];
NSString *targetPath = @"/Users/zhaoxiaohu/Desktop/aaa/love.txt";
// //如何移动文件
// [fm moveItemAtPath:createDirPathtoPath:targetPath error:nil];
//如何删除文件
[fm removeItemAtPath:targetPath error:nil];
}
return 0;
}