NSFileManager 文件管理详细介绍
Posted iOS的美丽岁月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSFileManager 文件管理详细介绍相关的知识,希望对你有一定的参考价值。
1、前言
这是一篇关于文件管理的博客,不说很全,但是很详细。涵盖90%的NSFileManger类的方法。各个方法的实现举例和介绍分析。如果有什么问题,可以加入:QQ:185341804 (成功QQ吧)或则加我QQ :1542100658 欢迎您的加入和询问。
2、目录大纲
3、代码全段
//
// ViewController+KNSFileManager.m
// NSFileManager
//
// Created by MAC on 2017/3/28.
// Copyright © 2017年 NetworkCode小贱. All rights reserved.
//
#import "ViewController.h"
@implementation ViewController (KNSFileManager)
-(void)viewDidLoad
[super viewDidLoad];
/**
创建文件管理对象
*/
[self createFileManagerObject];
/**
创建文件
*/
[self createFile:@"NetWork小贱.plist"];
/**
创建文件夹
*/
[self createFolder:@"NetWork"];
/**
判断文件内容是否相等
*/
[self fileContentComparison];
/**
文件或者文件夹的复制
*/
[self copyFile];
/**
文件或者文件夹的移动
*/
[self moveFile];
/**
创建硬连接
*/
[self linkFile];
/**
删除文件或文件夹
*/
[self removeFile];
/**
获取文件中的数据
*/
[self getDataFile];
/**
获取文件夹的层次
*/
[self getArrangement];
/**
获取文件在系统中代表的字符
*/
[self getfileSystemRepresentation];
/**
获取文件的属性
*/
[self getFileAttribute];
#pragma mark -- 创建一个NSFileManager类的对象
-(void)createFileManagerObject
if (!fileManager)
fileManager = [NSFileManager defaultManager];
#pragma mark -- 创建文件的路径
-(NSString*)createFilePath:(NSString*)fileName
NSString * filePathString = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
return [NSString stringWithFormat:@"%@/%@",filePathString,fileName];
#pragma mark 创建文件
-(void)createFile:(NSString*)fileString
/**
创建文件
@parm createFileAtPath 文件的路径
@parm contents 文件创建时写入的内容,可为nil
@parm attributes 文件的属性,可为nil
*/
BOOL isFile = [fileManager createFileAtPath:[self createFilePath:fileString] contents:nil attributes:nil];
if (!isFile)
NSLog(@"创建失败");
return;
/**
判断文件是否存在
*/
[self judgeObjectExistence:[self createFilePath:@"NetWork小贱.plist"]];
#pragma mark -- 创建文件夹
-(void)createFolder:(NSString*)folderString
/**
创建文件夹
@parm path 创建文件夹的路径
@parm createIntermediates 是否展开文件夹的中间目录
@parm attributes 是创建文件夹设置的属性,可为nil
@parm error 创建文件夹返回的错误对象,可为nil
*/
NSError * error = nil;
BOOL isFolder = [fileManager createDirectoryAtPath:[self createFilePath:folderString] withIntermediateDirectories:YES attributes:nil error:&error];
if (!isFolder)
NSLog(@"createFolder_error:%@",error);
return;
/**
判断文件夹是否存在
*/
[self judgeObjectExistence:[self createFilePath:@"NetWork"]];
#pragma mark -- 判断文件是否存在
-(void)judgeObjectExistence:(NSString*)objectPath
/**
判断文或者文件夹
BOOL Existence = [fileManager fileExistsAtPath:objectPath isDirectory:YES];
*/
BOOL isExistence = [fileManager fileExistsAtPath:objectPath];
if (!isExistence)
NSLog(@"不存在");
return;
/**
判断文件或者文件夹是否可读
*/
[self judgeObjectReadJurisdiction:objectPath];
/**
判断文件或者文件夹是否可写权限
*/
[self judgeObjectWritJurisdiction:objectPath];
/**
判断文件是否是可执行文件
*/
[self judgeObjectExecutJurisdiction:objectPath];
/**
判断是否是可删除的对象
*/
[self judgeObjectDeletJurisdiction:objectPath];
/**
获取可视化的文件字符串
*/
[self getVisualizationFileString:objectPath];
#pragma mark -- 判断对象的权限是否可读
-(void)judgeObjectReadJurisdiction:(NSString*)objectPath
/**
判断对象是否有可读权限
@parm path 对象路径
*/
BOOL isRead = [fileManager isReadableFileAtPath:objectPath];
if (!isRead)
NSLog(@"没有可读权限");
#pragma mark -- 判断对象是否有可写的权限
-(void)judgeObjectWritJurisdiction:(NSString*)objectPath
/**
判断对象是否有可写权限
@parm path 对象路径
*/
BOOL isWrit = [fileManager isWritableFileAtPath:objectPath];
if (!isWrit)
NSLog(@"没有可写权限");
#pragma mark -- 判断是否是可执行文件
-(void)judgeObjectExecutJurisdiction:(NSString*)objectPath
/**
判断是否是可执行文件
@parm path 对象路径
知识:
可执行文件 (executable file) 指的是可以由操作系统进行加载执行的文件。
*/
BOOL isExecut = [fileManager isExecutableFileAtPath:objectPath];
if (!isExecut)
NSLog(@"不是可执行文件");
#pragma mark -- 判断文件或者文件夹是否可以删除
-(void)judgeObjectDeletJurisdiction:(NSString*)objectPath
/**
判断是否是可可删除的对象
@parm path 对象路径
*/
BOOL isDelet = [fileManager isDeletableFileAtPath:objectPath];
if (!isDelet)
NSLog(@"不可删除的对象");
#pragma mark 文件数据的写入
-(void)writeToFile:(NSString*)content path:(NSString*)path
NSData * data = [content dataUsingEncoding:NSUTF8StringEncoding];
BOOL isFinish = [data writeToFile:path atomically:YES];
if (!isFinish)
NSLog(@"写入失败");
#pragma mark -- 判断两个文件内容是否相等
-(void)fileContentComparison
/**
测试文件内容是否相等
*/
NSArray * contentArray = @[@"清明时节雨纷纷",@"路上行人欲断魂",@"成功QQ吧",@"成功QQ吧"];
NSArray * fileNameArray = @[@"cg_a.txt",@"cg_b.txt",@"cg_c.txt",@"cg_d.txt"];
/**
创建文件,并写入数据
*/
for (unsigned int i =0 ; i<fileNameArray.count; i++)
BOOL isFile = [fileManager createFileAtPath:[self createFilePath:fileNameArray[i]] contents:contentArray[i] attributes:nil];
if (!isFile)
NSLog(@"文件创建失败");
/**
进行分组比较
*/
for (unsigned int i =0; i<fileNameArray.count; i++)
/**
文件内容的比较
@parm path1,path2 文件的路径
*/
if (i==0||i%2==0)
NSLog(@"%d",i);
BOOL isIdentical = [fileManager contentsEqualAtPath:[self createFilePath:fileNameArray[i]] andPath:[self createFilePath:fileNameArray[i+1]]];
if (!isIdentical)
NSLog(@"文件不相同-%@--%@",fileNameArray[i],fileNameArray[i+1]);
else
NSLog(@"文件相同-%@--%@",fileNameArray[i],fileNameArray[i+1]);
/**
输出:
2017-03-30 15:08:04.833 NSFileManager[3899:940954] 0
2017-03-30 15:08:04.833 NSFileManager[3899:940954] 文件不相同-cg_a.txt--cg_b.txt
2017-03-30 15:08:04.834 NSFileManager[3899:940954] 2
2017-03-30 15:08:04.834 NSFileManager[3899:940954] 文件相同-cg_c.txt--cg_d.txt
*/
#pragma mark -- 获取可视化文件字符串
-(void)getVisualizationFileString:(NSString*)path
NSString * displayNameAtPath = [fileManager displayNameAtPath:path];
NSLog(@"可视化串:%@",displayNameAtPath);
/**
输出:
2017-03-30 15:28:27.354 NSFileManager[4108:1007542] 可视化串:NetWork小贱.plist
2017-03-30 15:28:27.355 NSFileManager[4108:1007542] 可视化串:NetWork
注意:
该返回的可视化字符串,不可用于其他函数的参数。对于本地的文件,将返回合适的字符串。
*/
#pragma mark 文件或者文件夹的拷贝
-(void)copyFile
[self createFolder:@"A"];
[self createFile:@"A/a.txt"];
[self createFolder:@"B"];
[self createFolder:@"B/C"];
NSString * FloderNameStr = [self createFilePath:@"A"];
NSString * fileNameStr = [self createFilePath:@"A/a.txt"];
NSString * fileName = [self createFilePath:@"B/b.txt"];
NSString * FloderName = [self createFilePath:@"C"];
/**
文件夹的复制
*/
[self copyObject:FloderNameStr toPath:FloderName];
/**
文件的复制
*/
[self copyObject:fileNameStr toPath:fileName];
/**
输出:
NSFileManager[5178:1361817] 复制成功
NSFileManager[5178:1361817] 复制成功
注意:
文件和文件夹的复制,复制文件不能提前比被复制文件存在。比如:B要复制A,那B在复制前不能存在,否则将不成功。
*/
-(void)copyObject:(NSString*)path toPath:(NSString*) path1
/**
文件夹的拷贝
@parm srcPath 要复制的文件夹路径
@parm dstPath 目的文件夹路径
@parm error 错误信息
*/
NSError * error;
BOOL isFolder = [fileManager copyItemAtPath:path toPath:path1 error:&error];
if (!isFolder)
NSLog(@"文件夹复制失败-%@",error);
return;
NSLog(@"复制成功");
#pragma mark -- 文件和文件夹的移动
-(void)moveFile
/**
文件夹的移动
*/
[self createFolder:@"M_1"];
NSString * Folder_M1_Path = [self createFilePath:@"M_1"];
NSString * Folder_M2_Path = [self createFilePath:@"M_2"];
/**
我们要将 M_1 移动到 M_2 里面
*/
[self moveObject:Folder_M1_Path toPath:Folder_M2_Path];
/**
文件的移动
*/
[self createFile:@"m.txt"];
NSString * filePath = [self createFilePath:@"m.txt"];
NSString * Folder_M3_Path = [self createFilePath:@"M_3"];
[self moveObject:filePath toPath:Folder_M3_Path];
/**
输出:
2017-03-30 17:23:59.848 NSFileManager[5818:1525452] 移动成功!
2017-03-30 17:23:59.849 NSFileManager[5818:1525452] 移动成功!
*/
-(void)moveObject:(NSString*)path1 toPath:(NSString*)path2
/**
对象的移动
@parm srcPath 要移动的对象路径
@parm dstPath 移动后的对象路径
@parm error 错误信息
*/
NSError * error ;
BOOL isMove = [fileManager moveItemAtPath:path1 toPath:path2 error:&error];
if (isMove)
NSLog(@"移动成功!");
#pragma mark 创建文件或文件夹间的硬链接
-(void)linkFile
/**
创建文件夹
*/
[self createFile:@"L_k_1.txt"];
NSString * FolderPath = [self createFilePath:@"L_k_1.txt"];
NSString * FolderLinkPath = [self createFilePath:@"L_k_2.txt"];
/**
创建链接
*/
[self linkObject:FolderPath toPath:FolderLinkPath];
/**
输出:
2017-03-30 17:56:53.320 NSFileManager[6181:1659306] 链接成功!
*/
-(void)linkObject:(NSString*)path1 toPath:(NSString*)path2
/**
对象间创建硬链接
@parm srcPath 要链接的对象路径
@parm dstPath 链接后的对象路径
@parm error 错误信息
*/
NSError * error ;
BOOL isLink = [fileManager linkItemAtPath:path1 toPath:path2 error:&error];
if (isLink)
NSLog(@"链接成功!");
[@"my love show" writeToFile:[self createFilePath:@"L_k_2.txt"] atomically:YES encoding:NSUTF8StringEncoding error:NULL];
NSString * FolderLinkPath = [self createFilePath:@"L_k_1.txt"];
NSLog(@"%@",[NSString stringWithContentsOfFile:FolderLinkPath encoding:NSUTF8StringEncoding error:NULL]);
#pragma mark -- 删除文件
-(void)removeFile
/**
删除文件夹
*/
[self createFolder:@"Love"];
[self removeObject:[self createFilePath:@"Love"]];
/**
删除文件
*/
[self createFile:@"remove.txt"];
[self removeObject:[self createFilePath:@"remove.txt"]];
-(void)removeObject:(NSString*)path
/**
检测文件是否存在
*/
BOOL isExistence = [fileManager fileExistsAtPath:path];
if (isExistence)
NSError * error ;
BOOL isRemove = [fileManager removeItemAtPath:path error:&error];
if (isRemove)
NSLog(@"%@",@"删除成功");
else
NSLog(@"删除失败--error:%@",error);
else
NSLog(@"文件不存在,请确认路径");
/**
输出:
2017-03-31 11:28:24.004 NSFileManager[2190:371451] 删除成功
2017-03-31 11:28:24.007 NSFileManager[2190:371451] 删除成功
*/
#pragma mark -- 获取数据
-(void)getDataFile
BOOL isFile = [fileManager createFileAtPath:[self createFilePath:@"abc.txt"] contents:[@"成功QQ吧" dataUsingEncoding:NSUTF8StringEncoding ] attributes:nil];
if (isFile)
[self getData:[self createFilePath:@"abc.txt"]];
-(void)getData:(NSString*)path
if (!path) return;
NSData * data = [fileManager contentsAtPath:path];
NSString * content = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"获取数据:%@",content);
#pragma mark -- 获取文件或者文件夹的层次结构
-(void)getArrangement
/**
文件夹层次
*/
[self createFolder:@"ABC/BS/CKK/wwq"];
[self getArrangementObject:[self createFilePath:@"ABC"]];
/**
输出:
2017-03-31 15:54:00.584 NSFileManager[4859:1110472] 文件的层次:(
BS,
"BS/CKK",
"BS/CKK/wwq"
)
注意:
该方法一版不要调用,因为计算损耗较大
*/
-(void)getArrangementObject:(NSString*)path
if (!path) return;
NSArray * array = [fileManager subpathsAtPath:path];
NSLog(@"文件的层次:%@",array);
#pragma mark -- 获取文件或者文件夹在系统中代表的字符
-(void)getfileSystemRepresentation
/**
创建一个文件
*/
[self createFolder:@"SR_Love"];
const char * ar = [fileManager fileSystemRepresentationWithPath:[self createFilePath:@"SR_Love"]];
NSLog(@"字符:%s",ar);
#pragma mark -- 获取文件属性
-(void)getFileAttribute
[self createFolder:@"Attribute"];
/**
获取路径
*/
NSString * FolderPath = [self createFilePath:@"Attribute"];
NSDictionary * FileAttribute = [fileManager attributesOfItemAtPath:FolderPath error:NULL];
NSLog(@"文件的属性:%@",FileAttribute);
/**
输出:
2017-03-31 16:35:43.572 NSFileManager[5283:1231846] 文件的属性:
NSFileCreationDate = "2017-03-31 08:35:43 +0000";
NSFileExtensionHidden = 0;
NSFileGroupOwnerAccountID = 20;
NSFileGroupOwnerAccountName = staff;
NSFileModificationDate = "2017-03-31 08:35:43 +0000";
NSFileOwnerAccountID = 501;
NSFilePosixPermissions = 493;
NSFileReferenceCount = 2;
NSFileSize = 68;
NSFileSystemFileNumber = 22010573;
NSFileSystemNumber = 16777218;
NSFileType = NSFileTypeDirectory;
介绍:
NSFileCreationDate 文件创建的时间
NSFileExtensionHidden 文件路径是否展开
NSFileGroupOwnerAccountID 创建分组的ID
NSFileGroupOwnerAccountName 创建分组的名字
NSFileModificationDate 文件修改的时间
NSFileOwnerAccountID 创建者的ID
NSFilePosixPermissions 文件权限的编号
NSFileReferenceCount 文件参考数量
NSFileSize 文件大小
NSFileSystemFileNumber 系统文件编号
NSFileSystemNumber 系统编号
NSFileType 文件类型
*/
#pragma mark -- NSFileManagerDelegate
/**
文件移动
*/
-(BOOL)fileManager:(NSFileManager *)fileManager shouldRemoveItemAtURL:(NSURL *)URL
return YES;
-(BOOL)fileManager:(NSFileManager *)fileManager shouldRemoveItemAtPath:(NSString *)path
return YES;
/**
文件复制
*/
-(BOOL)fileManager:(NSFileManager *)fileManager shouldCopyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL
return YES;
-(BOOL)fileManager:(NSFileManager *)fileManager shouldCopyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath
return YES;
/**
文件的连接
*/
-(BOOL)fileManager:(NSFileManager *)fileManager shouldLinkItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL
return YES;
-(BOOL)fileManager:(NSFileManager *)fileManager shouldLinkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath
return YES;
/**
文件的移动
*/
-(BOOL)fileManager:(NSFileManager *)fileManager shouldMoveItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL
return YES;
-(BOOL)fileManager:(NSFileManager *)fileManager shouldMoveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath
return YES;
/**
文件移除
*/
-(BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error removingItemAtURL:(NSURL *)URL
return YES;
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error removingItemAtPath:(NSString *)path
return YES;
/**
文件连接错误
*/
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error linkingItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath
return YES;
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error linkingItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL
return YES;
@end
4、下载地址
https://pan.baidu.com/s/1pKKRmtH
以上是关于NSFileManager 文件管理详细介绍的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C NSFileManager 文件管理总结
Foundation框架 之 NSFileManager 与 copy & mutableCopy