目錄獲取
獲取沙盒的主目錄路徑:
-
+ (NSString *)homeDir {
-
return NSHomeDirectory();
-
}
-
復制代碼
獲取沙盒中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;
-
}
-
復制代碼
創建文件:
-
/*創建文件
-
*參數1:文件創建的路徑
-
*參數2:寫入文件的內容
-
*參數3:假如已經存在此文件是否覆蓋
-
*參數4:錯誤信息
-
*/
-
+ (BOOL)createFileAtPath:(NSString *)path overwrite:(BOOL)overwrite error:(NSError *__autoreleasing *)error {
-
// 如果文件夾路徑不存在,那么先創建文件夾
-
NSString *directoryPath = [self directoryAtPath:path];
-
if (![self isExistsAtPath:directoryPath]) {
-
// 創建文件夾
-
if (![self createDirectoryAtPath:directoryPath error:error]) {
-
return NO;
-
}
-
}
-
// 如果文件存在,並不想覆蓋,那么直接返回YES。
-
if (!overwrite) {
-
if ([self isExistsAtPath:path]) {
-
return YES;
-
}
-
}
-
/*創建文件
-
*參數1:創建文件的路徑
-
*參數2:創建文件的內容(NSData類型)
-
*參數3:文件相關屬性
-
*/
-
BOOL isSuccess = [[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil];
-
-
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 寫入文件內容
-
/*參數1:文件路徑
-
*參數2:文件內容
-
*參數3:錯誤信息
-
*/
-
+ (BOOL)writeFileAtPath:(NSString *)path content:(NSObject *)content error:(NSError *__autoreleasing *)error {
-
//判斷文件內容是否為空
-
if (!content) {
-
[NSException raise:@ "非法的文件內容" format:@"文件內容不能為nil"];
-
return NO;
-
}
-
//判斷文件(夾)是否存在
-
if ([self isExistsAtPath:path]) {
-
if ([content isKindOfClass:[NSMutableArray class]]) {//文件內容為可變數組
-
[(NSMutableArray *)content writeToFile:path atomically:YES];
-
} else if ([content isKindOfClass:[NSArray class]]) {//文件內容為不可變數組
-
[(NSArray *)content writeToFile:path atomically:YES];
-
} else if ([content isKindOfClass:[NSMutableData class]]) {//文件內容為可變NSMutableData
-
[(NSMutableData *)content writeToFile:path atomically:YES];
-
} else if ([content isKindOfClass:[NSData class]]) {//文件內容為NSData
-
[(NSData *)content writeToFile:path atomically:YES];
-
} else if ([content isKindOfClass:[NSMutableDictionary class]]) {//文件內容為可變字典
-
[(NSMutableDictionary *)content writeToFile:path atomically:YES];
-
} else if ([content isKindOfClass:[NSDictionary class]]) {//文件內容為不可變字典
-
[(NSDictionary *)content writeToFile:path atomically:YES];
-
} else if ([content isKindOfClass:[NSJSONSerialization class]]) {//文件內容為JSON類型
-
[(NSDictionary *)content writeToFile:path atomically:YES];
-
} else if ([content isKindOfClass:[NSMutableString class]]) {//文件內容為可變字符串
-
[[((NSString *)content) dataUsingEncoding:NSUTF8StringEncoding] writeToFile:path atomically:YES];
-
} else if ([content isKindOfClass:[NSString class]]) {//文件內容為不可變字符串
-
[[((NSString *)content) dataUsingEncoding:NSUTF8StringEncoding] writeToFile:path atomically:YES];
-
} else if ([content isKindOfClass:[UIImage class]]) {//文件內容為圖片
-
[UIImagePNGRepresentation((UIImage *)content) writeToFile:path atomically:YES];
-
} else if ([content conformsToProtocol:@protocol(NSCoding)]) {//文件歸檔
-
[NSKeyedArchiver archiveRootObject:content toFile:path];
-
} else {
-
[NSException raise:@ "非法的文件內容" format:@"文件類型%@異常,無法被處理。", NSStringFromClass([content class])];
-
-
return NO;
-
}
-
} else {
-
return NO;
-
}
-
return YES;
-
}
-
#pragma mark - 判斷文件(夾)是否存在
-
+ (BOOL)isExistsAtPath:(NSString *)path {
-
return [[NSFileManager defaultManager] fileExistsAtPath:path];
-
}
-
復制代碼
4、刪除文件(夾)
刪除文件(夾)
-
+ (BOOL)removeItemAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
-
return [[NSFileManager defaultManager] removeItemAtPath:path error:error];
-
}
-
復制代碼
清空Caches或者temp文件夾:
-
#pragma mark 清空Cashes文件夾
-
+ (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;
-
}
-
#pragma mark 清空temp文件夾
-
+ (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 - 復制文件
-
/*參數1、被復制文件路徑
-
*參數2、要復制到的目標文件路徑
-
*參數3、當要復制到的文件路徑文件存在,會復制失敗,這里傳入是否覆蓋
-
*參數4、錯誤信息
-
*/
-
+ (BOOL)copyItemAtPath:(NSString *)path toPath:(NSString *)toPath overwrite:(BOOL)overwrite error:(NSError *__autoreleasing *)error {
-
// 先要保證源文件路徑存在,不然拋出異常
-
if (![self isExistsAtPath:path]) {
-
[NSException raise:@ "非法的源文件路徑" format:@"源文件路徑%@不存在,請檢查源文件路徑", path];
-
return NO;
-
}
-
//獲得目標文件的上級目錄
-
NSString *toDirPath = [self directoryAtPath:toPath];
-
if (![self isExistsAtPath:toDirPath]) {
-
// 創建復制路徑
-
if (![self createDirectoryAtPath:toDirPath error:error]) {
-
return NO;
-
}
-
}
-
// 如果覆蓋,那么先刪掉原文件
-
if (overwrite) {
-
if ([self isExistsAtPath:toPath]) {
-
[self removeItemAtPath:toPath error:error];
-
}
-
}
-
// 復制文件,如果不覆蓋且文件已存在則會復制失敗
-
BOOL isSuccess = [[NSFileManager defaultManager] copyItemAtPath:path toPath:toPath error:error];
-
-
return isSuccess;
-
}
-
-
#pragma mark - 判斷文件(夾)是否存在
-
+ (BOOL)isExistsAtPath:(NSString *)path {
-
return [[NSFileManager defaultManager] fileExistsAtPath:path];
-
}
-
復制代碼
6、 移動文件(夾)
依據源文件的路徑移動到目標路徑:
-
#pragma mark - 移動文件(夾)
-
/*參數1、被移動文件路徑
-
*參數2、要移動到的目標文件路徑
-
*參數3、當要移動到的文件路徑文件存在,會移動失敗,這里傳入是否覆蓋
-
*參數4、錯誤信息
-
*/
-
+ (BOOL)moveItemAtPath:(NSString *)path toPath:(NSString *)toPath overwrite:(BOOL)overwrite error:(NSError *__autoreleasing *)error {
-
// 先要保證源文件路徑存在,不然拋出異常
-
if (![self isExistsAtPath:path]) {
-
[NSException raise:@ "非法的源文件路徑" format:@"源文件路徑%@不存在,請檢查源文件路徑", path];
-
return NO;
-
}
-
//獲得目標文件的上級目錄
-
NSString *toDirPath = [self directoryAtPath:toPath];
-
if (![self isExistsAtPath:toDirPath]) {
-
// 創建移動路徑
-
if (![self createDirectoryAtPath:toDirPath error:error]) {
-
return NO;
-
}
-
}
-
// 判斷目標路徑文件是否存在
-
if ([self isExistsAtPath:toPath]) {
-
//如果覆蓋,刪除目標路徑文件
-
if (overwrite) {
-
//刪掉目標路徑文件
-
[self removeItemAtPath:toPath error:error];
-
} else {
-
//刪掉被移動文件
-
[self removeItemAtPath:path error:error];
-
return YES;
-
}
-
}
-
-
// 移動文件,當要移動到的文件路徑文件存在,會移動失敗
-
BOOL isSuccess = [[NSFileManager defaultManager] moveItemAtPath:path toPath:toPath error:error];
-
-
return isSuccess;
-
}
-
復制代碼
7、根據URL獲取文件名
根據文件路徑獲取文件名稱,是否需要后綴:
-
#pragma mark - 根據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類型的大小
-
NSNumber *size = [self sizeOfItemAtPath:path error:error];
-
if (size) {
-
//將文件大小格式化為字節
-
return [self sizeFormatted:size];
-
}
-
return nil;
-
}
-
-
#pragma mark 將文件大小格式化為字節
-
+(NSString *)sizeFormatted:(NSNumber *)size {
-
/*NSByteCountFormatterCountStyle枚舉
-
*NSByteCountFormatterCountStyleFile 字節為單位,采用十進制的1000bytes = 1KB
-
*NSByteCountFormatterCountStyleMemory 字節為單位,采用二進制的1024bytes = 1KB
-
*NSByteCountFormatterCountStyleDecimal KB為單位,采用十進制的1000bytes = 1KB
-
*NSByteCountFormatterCountStyleBinary KB為單位,采用二進制的1024bytes = 1KB
-
*/
-
return [NSByteCountFormatter stringFromByteCount:[size unsignedLongLongValue] countStyle:NSByteCountFormatterCountStyleFile];
-
}
-
復制代碼
獲取文件夾大小(單位為字節):
-
+ (NSString *)sizeFormattedOfDirectoryAtPath:(NSString *)path error:(NSError *__autoreleasing *)error {
-
//先獲取NSNumber類型的大小
-
NSNumber *size = [self sizeOfDirectoryAtPath:path error:error];
-
if (size) {
-
return [self sizeFormatted:size];
-
}
-
return nil;
-
}
-
#pragma mark 將文件大小格式化為字節
-
+(NSString *)sizeFormatted:(NSNumber *)size {
-
/*NSByteCountFormatterCountStyle枚舉
-
*NSByteCountFormatterCountStyleFile 字節為單位,采用十進制的1000bytes = 1KB
-
*NSByteCountFormatterCountStyleMemory 字節為單位,采用二進制的1024bytes = 1KB
-
*NSByteCountFormatterCountStyleDecimal KB為單位,采用十進制的1000bytes = 1KB
-
*NSByteCountFormatterCountStyleBinary KB為單位,采用二進制的1024bytes = 1KB
-
*/
-
return [NSByteCountFormatter stringFromByteCount:[size unsignedLongLongValue] countStyle:NSByteCountFormatterCountStyleFile];
-
}
-
復制代碼
10、遍歷文件夾
遍歷文件夾,分為深遍歷和淺遍歷:
-
#pragma mark - 遍歷文件夾
-
/**
-
文件遍歷
-
參數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獲取文件某個屬性:
-
//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];
-
}
-
復制代碼