复制代码
获取沙盒中Documents的目录路径:
+ (NSString *)documentsDir {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
复制代码
获取沙盒中Library的目录路径:
+ (NSString *)libraryDir {
return [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
复制代码
获取沙盒中Libarary/Preferences的目录路径:
+ (NSString *)preferencesDir {
NSString *libraryDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
return [libraryDir stringByAppendingPathComponent:@"Preferences"];
复制代码
获取沙盒中Library/Caches的目录路径:
+ (NSString *)cachesDir {
return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
复制代码
获取沙盒中tmp的目录路径:
+ (NSString *)tmpDir {
return NSTemporaryDirectory();
复制代码
2、创建文件(夹)
创建文件夹:
+ (BOOL)createDirectoryAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
NSFileManager *manager = [NSFileManager defaultManager];
/* createDirectoryAtPath:withIntermediateDirectories:attributes:error:
* 参数1:创建的文件夹的路径
* 参数2:是否创建媒介的布尔值,一般为YES
* 参数3: 属性,没有就置为nil
* 参数4: 错误信息
BOOL isSuccess = [manager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:error];
return isSuccess;
复制代码
创建文件:
获取文件创建的时间或者修改的时间:
+ (NSDate *)creationDateOfItemAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
return (NSDate *)[self attributeOfItemAtPath:path forKey:NSFileCreationDate error:error];
+ (NSDate *)modificationDateOfItemAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
return (NSDate *)[self attributeOfItemAtPath:path forKey:NSFileModificationDate error:error];
复制代码
3、写入文件内容
按照文件路径向文件写入内容,内容可为数组、字典、NSData等等:
#pragma mark 写入文件内容
4、删除文件(夹)
删除文件(夹)
+ (BOOL)removeItemAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
return [[NSFileManager defaultManager] removeItemAtPath:path error:error];
复制代码
清空Caches或者temp文件夹:
+ (BOOL)clearCachesDirectory {
NSArray *subFiles = [self listFilesInCachesDirectoryByDeep:NO]
BOOL isSuccess = YES
for (NSString *file in subFiles) {
NSString *absolutePath = [[self cachesDir] stringByAppendingPathComponent:file]
isSuccess &= [self removeItemAtPath:absolutePath]
return isSuccess
+ (BOOL)clearTmpDirectory {
NSArray *subFiles = [self listFilesInTmpDirectoryByDeep:NO]
BOOL isSuccess = YES
for (NSString *file in subFiles) {
NSString *absolutePath = [[self tmpDir] stringByAppendingPathComponent:file]
isSuccess &= [self removeItemAtPath:absolutePath]
return isSuccess
复制代码
5、复制文件(夹)
依据源文件的路径复制一份到目标路径:
#pragma mark - 复制文件
6、 移动文件(夹)
依据源文件的路径移动到目标路径:
#pragma mark - 移动文件(夹)
7、根据URL获取文件名
根据文件路径获取文件名称,是否需要后缀:
/*参数1:文件路径
*参数2、是否需要后缀
+ (NSString *)fileNameAtPath:(NSString *)path suffix:(BOOL)suffix {
NSString *fileName = [path lastPathComponent]
if (!suffix) {
fileName = [fileName stringByDeletingPathExtension]
return fileName
复制代码
获取文件所在的文件夹路径:
+ (NSString *)directoryAtPath:(NSString *)path {
return [path stringByDeletingLastPathComponent];
复制代码
根据文件路径获取文件扩展类型:
+ (NSString *)suffixAtPath:(NSString *)path {
return [path pathExtension];
复制代码
8、判断文件(夹)是否存在
判断文件路径是否存在:
+ (BOOL)isExistsAtPath:(NSString *)path {
return [[NSFileManager defaultManager] fileExistsAtPath:path];
复制代码
判断路径是否为空(判空条件是文件大小为0,或者是文件夹下没有子文件):
+ (BOOL)isEmptyItemAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
return ([self isFileAtPath:path error:error] &&
[[self sizeOfItemAtPath:path error:error] intValue] == 0) ||
([self isDirectoryAtPath:path error:error] &&
[[self listFilesInDirectoryAtPath:path deep:NO] count] == 0);
复制代码
判断目录是否是文件夹:
+ (BOOL)isDirectoryAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
return ([self attributeOfItemAtPath:path forKey:NSFileType error:error] == NSFileTypeDirectory);
复制代码
判断目录是否是文件:
+ (BOOL)isFileAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
return ([self attributeOfItemAtPath:path forKey:NSFileType error:error] == NSFileTypeRegular);
复制代码
判断目录是否可以执行:
+ (BOOL)isExecutableItemAtPath:(NSString *)path {
return [[NSFileManager defaultManager] isExecutableFileAtPath:path];
复制代码
判断目录是否可读:
+ (BOOL)isReadableItemAtPath:(NSString *)path {
return [[NSFileManager defaultManager] isReadableFileAtPath:path];
复制代码
判断目录是否可写:
+ (BOOL)isWritableItemAtPath:(NSString *)path {
return [[NSFileManager defaultManager] isWritableFileAtPath:path];
复制代码
9、获取文件(夹)大小
获取文件大小(NSNumber):
+ (NSNumber *)sizeOfItemAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
return (NSNumber *)[self attributeOfItemAtPath:path forKey:NSFileSize error:error];
复制代码
获取文件夹大小(NSNumber):
#pragma mark 获取文件夹的大小
+ (NSNumber *)sizeOfDirectoryAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
if ([self isDirectoryAtPath:path error:error]) {
NSArray *subPaths = [self listFilesInDirectoryAtPath:path deep:YES];
NSEnumerator *contentsEnumurator = [subPaths objectEnumerator];
NSString *file;
unsigned long long int folderSize = 0;
while (file = [contentsEnumurator nextObject]) {
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[path stringByAppendingPathComponent:file] error:nil];
folderSize += [[fileAttributes objectForKey:NSFileSize] intValue];
return [NSNumber numberWithUnsignedLongLong:folderSize];
return nil;
复制代码
获取文件大小(单位为字节):
+ (NSString *)sizeFormattedOfItemAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
NSNumber *size = [self sizeOfItemAtPath:path error:error];
if (size) {
return [self sizeFormatted:size];
return nil;
#pragma mark 将文件大小格式化为字节
+(NSString *)sizeFormatted:(NSNumber *)size {
获取文件夹大小(单位为字节):
+ (NSString *)sizeFormattedOfDirectoryAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
NSNumber *size = [self sizeOfDirectoryAtPath:path error:error];
if (size) {
return [self sizeFormatted:size];
return nil;
#pragma mark 将文件大小格式化为字节
+(NSString *)sizeFormatted:(NSNumber *)size {
10、遍历文件夹
遍历文件夹,分为深遍历和浅遍历:
参数1:目录的绝对路径
参数2:是否深遍历 (1. 浅遍历:返回当前目录下的所有文件和文件夹;
2. 深遍历:返回当前目录下及子目录下的所有文件和文件夹)
+ (NSArray *)listFilesInDirectoryAtPath:(NSString *)path deep:(BOOL)deep {
NSArray *listArr
NSError *error
NSFileManager *manager = [NSFileManager defaultManager]
if (deep) {
// 深遍历
NSArray *deepArr = [manager subpathsOfDirectoryAtPath:path error:&error]
if (!error) {
listArr = deepArr
}else {
listArr = nil
}else {
// 浅遍历
NSArray *shallowArr = [manager contentsOfDirectoryAtPath:path error:&error]
if (!error) {
listArr = shallowArr
}else {
listArr = nil
return listArr
复制代码
11、获取文件属性
根据key获取文件某个属性:
FOUNDATION_EXPORT NSString * const NSFileType;
FOUNDATION_EXPORT NSString * const NSFileTypeDirectory;
FOUNDATION_EXPORT NSString * const NSFileTypeRegular;
FOUNDATION_EXPORT NSString * const NSFileTypeSymbolicLink;
FOUNDATION_EXPORT NSString * const NSFileTypeSocket;
FOUNDATION_EXPORT NSString * const NSFileTypeCharacterSpecial;
FOUNDATION_EXPORT NSString * const NSFileTypeBlockSpecial;
FOUNDATION_EXPORT NSString * const NSFileTypeUnknown;
FOUNDATION_EXPORT NSString * const NSFileSize;
FOUNDATION_EXPORT NSString * const NSFileModificationDate;
FOUNDATION_EXPORT NSString * const NSFileReferenceCount;
FOUNDATION_EXPORT NSString * const NSFileDeviceIdentifier;
FOUNDATION_EXPORT NSString * const NSFileOwnerAccountName;
FOUNDATION_EXPORT NSString * const NSFileGroupOwnerAccountName;
FOUNDATION_EXPORT NSString * const NSFilePosixPermissions;
FOUNDATION_EXPORT NSString * const NSFileSystemNumber;
FOUNDATION_EXPORT NSString * const NSFileSystemFileNumber;
FOUNDATION_EXPORT NSString * const NSFileExtensionHidden;
FOUNDATION_EXPORT NSString * const NSFileHFSCreatorCode;
FOUNDATION_EXPORT NSString * const NSFileHFSTypeCode;
FOUNDATION_EXPORT NSString * const NSFileImmutable;
FOUNDATION_EXPORT NSString * const NSFileAppendOnly;
FOUNDATION_EXPORT NSString * const NSFileCreationDate;
FOUNDATION_EXPORT NSString * const NSFileOwnerAccountID;
FOUNDATION_EXPORT NSString * const NSFileGroupOwnerAccountID;
FOUNDATION_EXPORT NSString * const NSFileBusy;
FOUNDATION_EXPORT NSString * const NSFileProtectionKey NS_AVAILABLE_IOS(4_0);
FOUNDATION_EXPORT NSString * const NSFileProtectionNone NS_AVAILABLE_IOS(4_0);
FOUNDATION_EXPORT NSString * const NSFileProtectionComplete NS_AVAILABLE_IOS(4_0);
FOUNDATION_EXPORT NSString * const NSFileProtectionCompleteUnlessOpen NS_AVAILABLE_IOS(5_0);
FOUNDATION_EXPORT NSString * const NSFileProtectionCompleteUntilFirstUserAuthentication NS_AVAILABLE_IOS(5_0);
复制代码
+ (id)attributeOfItemAtPath:(NSString *)path forKey:(NSString *)key error:(NSError *__autoreleasing *)error {
return [[self attributesOfItemAtPath:path error:error] objectForKey:key];
复制代码
获取文件属性集合:
+ (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
return [[NSFileManager defaultManager] attributesOfItemAtPath:path error:error];
复制代码