一.NSFileManager介绍
1.NSFileManager是iOS中的文件管理类
2.NSFileManager可以用来进行常见的文件\文件夹操作(拷贝、剪切、创建等)
二.NSFileManager方法
1.判断文件是否存在
//创建文件管理对象
//调用defaultManager 创建一个文件管理的单例对象
//单例对象:在程序运行期间,只有一个对象存在
NSFileManager *fm = [NSFileManager defaultManager];
// YES 存在 NO 不存在
BOOL isExitsts = [fm fileExistsAtPath:filePath];
NSLog(@"%d",isExitsts);
2.判断文件是否是一个目录
BOOL isDir;[[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:&isDir];
if (isDir) {
NSLog(@"这是一个目录");
} else {
NSLog(@"这不是一个目录");
}
3.判断文件是否可以读取
BOOL isReadable = [[NSFileManager defaultManager] isReadableFileAtPath:filePath];
NSLog(@"%d",isReadable);
4.判断文件是否可以写入
BOOL isWritable = [[NSFileManager defaultManager] isWritableFileAtPath:filePath];
NSLog(@"%d",isWritable);
5.判断文件是否可以操作
BOOL isExecutable = [[NSFileManager defaultManager] isExecutableFileAtPath:filePath];
NSLog(@"%d",isExecutable);
6.判断文件是否可以删除
BOOL isDeletable = [[NSFileManager defaultManager] isDeletableFileAtPath:filePath];
NSLog(@"%d",isDeletable);
7.创建文件夹(目录)
在指定的目录下创建文件夹,如果该文件夹存在,则不创建
NSError *error;
// filePath:文件夹的路径
// IntermediateDirectories:是否创建中间文件夹,YES会创建中间文件夹,NO不会创建中间文件夹
// attributes:文件夹的属性
// error: 创建失败的错误信息
BOOL isCreateDir = [[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:&error];
if (!isCreateDir) {
NSLog(@"%@",error);
}
8.创建文件
在指定的目录下创建文件,如果该文件名(文件名包括了后缀在内,比如test和test.html是两个文件)存在,则将这个文件删除,然后再创建;如果文件名不存在,则直接创建.此时这个文件的attributes信息全部更改,创建时间变成当前时间,修改时间变成当前时间
// path:文件的路径
// contents:文件的二进制内容(NSData)
// attributes:文件的属性
BOOL isCreateFile = [[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
if (isCreateFile) {
NSLog(@"创建文件成功");
}
9.复制文件
srcPath文件必须存在,dstPath路径所在的中间路径也必须存在,创建dstPath,将内容拷贝过去,同时保留srcPath文件
NSError *error;
BOOL isCopy = [[NSFileManager defaultManager] copyItemAtPath:srcPath toPath:dstPath error:&error];
if (!isCopy) {
NSLog(@"%@",error);
}
10.移动文件
如果dstPath不存在,则会创建dstPath,将内容拷贝过去,然后删除srcPath文件;如果dstPath存在,则会报错,同样dstPath的中间路径也必须存在,否则会报错
NSError *error;
BOOL isMove = [[NSFileManager defaultManager] moveItemAtPath:srcPath toPath:dstPath error:&error];
if (!isMove) {
NSLog(@"%@",error);
}
11.删除文件
NSError *error;
BOOL isRemove = [[NSFileManager defaultManager] removeItemAtPath:path error:&error];
if (!isRemove) {
NSLog(@"%@",error);
}
12.获取指定目录下文件及子目录
//使用递归的方式 获取当前目录及子目录下的所有的文件及文件夹
NSArray *subPaths = [[NSFileManager defaultManager] subpathsAtPath:dirPath];
//(推荐使用)subpathsOfDirectoryAtPath 不是使用递归的方式获取的
subPaths = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dirPath error:nil];
NSLog(@"subPaths = %@",subPaths);
13.获取指定目录下的文件及目录信息(不获取后代路径)
NSArray *directorys = [[NSFileManager defaultManager] directoryContentsAtPath:dirPath];
//(推荐使用)contentsOfDirectoryAtPath 不是使用递归的方式获取的
directorys = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:dirPath error:nil];
NSLog(@"directorys = %@",directorys);
14.获取文件属性(信息)
NSError *error;
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&error];
if (!error) {
NSLog(@"%@",attributes);
}
attributes打印结果:
{
NSFileCreationDate = "2016-04-21 10:10:28 +0000";
NSFileExtensionHidden = 0;
NSFileGroupOwnerAccountID = 20;
NSFileGroupOwnerAccountName = staff;
NSFileModificationDate = "2016-04-21 10:10:28 +0000";
NSFileOwnerAccountID = 501;
NSFilePosixPermissions = 420;
NSFileReferenceCount = 1;
NSFileSize = 26514;
NSFileSystemFileNumber = 6055428;
NSFileSystemNumber = 16777220;
NSFileType = NSFileTypeRegular;
}
attributes key值介绍:
1.NSFileCreationDate(可更改时间):这个键的值需要设置为一个NSDate对象,表示目录的创建时间
2.NSFileExtensionHidden:表示目录是否隐藏
3.NSFileGroupOwnerAccountID:这个键的值需要设置为一个表示unsigned int的NSNumber对象,表示目录的组ID
4.NSFileGroupOwnerAccountName:这个键的值需要设置为一个NSString对象,表示这个目录的用户组的名字
5.NSFileModificationDate(可更改时间):这个键的值需要设置为一个NSDate对象,表示目录的修改时间
6.NSFileOwnerAccountID:这个键的值需要设置为一个表示unsigned int的NSNumber对象,表示目录的所有者ID
7.NSFilePosixPermissions:这个键的值需要设置为一个表示short int的NSNumber对象,表示目录的访问权限
8.NSFileReferenceCount:这个键的值需要设置为一个表示unsigned long的NSNumber对象,表示目录的引用计数,即这个目录的硬链接数
9.NSFileSize(不可更改):文件或者文件夹的大小,注意单位是byte
10.NSFileType:表示目录的类型(NSFileTypeDirectory,NSFileTypeRegular,NSFileTypeSymbolicLink,NSFileTypeSocket,NSFileTypeCharacterSpecial,NSFileTypeBlockSpecial,NSFileTypeUnknown)