1 #import <Foundation/Foundation.h> 2 3 #define FILE_PATH(filePath) [File path:(filePath)] 4 #define ROOT_PATH [File rootPath] 5 #define BUNDLE_PATH(fileName) [File bundleSource:(fileName)] 6 #define CREATE_FOLDER(folderPath) [File createFolder:(folderPath)] 7 #define FILE_EXIST(filePath) [File exist:(filePath)] 8 #define IS_DIRECTORY(filePath) [File isDirectory:(filePath)] 9 #define IS_FILE(filePath) ![File isDirectory:(filePath)] 10 #define FILE_INFO(filePath) [File fileInfo:(filePath)] 11 #define FILE_SIZE(filePath) [File fileSize:(filePath)] 12 #define FILE_DICTIONARY(filePath) [File dictionaryFrom:(filePath)] 13 #define FILE_ARRAY(filePath) [File arrayFrom:(filePath)] 14 15 @interface File : NSObject 16 17 /* 18 注意:凡是参数为 filePath folderPath 的全部为相对路径,用以下字符串拼接使用 19 20 /Documents 21 /Library/Caches 22 /Library/Preferences 23 /tmp 24 25 其他都为绝对路径 26 */ 27 28 + (NSString *)rootPath; 29 + (NSString *)bundleSource:(NSString *)fileName; 30 + (NSString *)path:(NSString *)filePath; 31 + (BOOL)createFolder:(NSString *)filePath; 32 + (BOOL)exist:(NSString *)filePath; 33 + (BOOL)isDirectory:(NSString *)filePath; 34 + (NSDictionary *)fileInfo:(NSString *)filePath; 35 + (int)fileSize:(NSString *)filePath; 36 + (NSArray *)enumeratorFolder:(NSString *)folderPath; 37 + (void)enumeratorFolder:(NSString *)folderPath each:(void (^)(NSString *path))each; 38 39 + (BOOL)copyFrom:(NSString *)sourcePath to:(NSString *)targetPath; 40 + (BOOL)moveFrom:(NSString *)sourcePath to:(NSString *)targetPath; 41 + (BOOL)remove:(NSString *)targetPath; 42 43 + (BOOL)writePlist:(id)plist to:(NSString *)filePath; 44 + (NSMutableDictionary *)dictionaryFrom:(NSString *)filePath; 45 + (NSMutableArray *)arrayFrom:(NSString *)filePath; 46 + (void)path:(NSString *)filePath dictionary:(void (^)(NSMutableDictionary *dictionary))dictionary; 47 + (void)path:(NSString *)filePath array:(void (^)(NSMutableArray *array))array; 48 49 @end
File.m代码如下:
1 #import "File.h" 2 3 static NSString *_sandBoxPath = nil; 4 5 @implementation File 6 7 + (void)initialize 8 { 9 if (self == [File class]) 10 { 11 _sandBoxPath = NSHomeDirectory(); 12 } 13 } 14 15 + (NSString *)rootPath 16 { 17 return _sandBoxPath; 18 } 19 20 + (NSString *)path:(NSString *)filePath 21 { 22 return [_sandBoxPath stringByAppendingPathComponent:filePath]; 23 } 24 25 + (BOOL)createFolder:(NSString *)filePath 26 { 27 return [[NSFileManager defaultManager] createDirectoryAtPath:[self path:filePath] 28 withIntermediateDirectories:YES 29 attributes:nil 30 error:nil]; 31 } 32 33 + (NSString *)bundleSource:(NSString *)fileName 34 { 35 return [[NSBundle mainBundle] pathForResource:fileName 36 ofType:nil]; 37 } 38 39 + (BOOL)exist:(NSString *)filePath 40 { 41 return [[NSFileManager defaultManager] fileExistsAtPath:[self path:filePath] 42 isDirectory:NO]; 43 } 44 45 + (BOOL)isDirectory:(NSString *)filePath 46 { 47 BOOL isDirectory = NO; 48 49 [[NSFileManager defaultManager] fileExistsAtPath:[self path:filePath] 50 isDirectory:&isDirectory]; 51 52 return isDirectory; 53 } 54 55 + (BOOL)copyFrom:(NSString *)sourcePath to:(NSString *)targetPath 56 { 57 return [[NSFileManager defaultManager] copyItemAtPath:sourcePath 58 toPath:targetPath 59 error:nil]; 60 } 61 62 + (BOOL)moveFrom:(NSString *)sourcePath to:(NSString *)targetPath 63 { 64 return [[NSFileManager defaultManager] moveItemAtPath:sourcePath 65 toPath:targetPath 66 error:nil]; 67 } 68 69 + (BOOL)remove:(NSString *)targetPath 70 { 71 return [[NSFileManager defaultManager] removeItemAtPath:targetPath 72 error:nil]; 73 } 74 75 + (NSArray *)enumeratorFolder:(NSString *)folderPath 76 { 77 if ([self isDirectory:folderPath]) 78 { 79 NSMutableArray *storeArray = [NSMutableArray array]; 80 81 NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:folderPath]; 82 NSFileManager *localFileManager = [[NSFileManager alloc] init]; 83 NSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:docsDir]; 84 85 NSString *file; 86 while ((file = [dirEnum nextObject])) 87 { 88 [storeArray addObject:[folderPath stringByAppendingPathComponent:file]]; 89 } 90 91 return storeArray; 92 } 93 else 94 { 95 return nil; 96 } 97 } 98 99 + (void)enumeratorFolder:(NSString *)folderPath each:(void (^)(NSString *path))each 100 { 101 if ([self isDirectory:folderPath]) 102 { 103 NSMutableArray *storeArray = [NSMutableArray array]; 104 105 NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:folderPath]; 106 NSFileManager *localFileManager = [[NSFileManager alloc] init]; 107 NSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:docsDir]; 108 109 NSString *file; 110 while ((file = [dirEnum nextObject])) 111 { 112 [storeArray addObject:[folderPath stringByAppendingPathComponent:file]]; 113 } 114 115 [storeArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 116 each(obj); 117 }]; 118 } 119 } 120 121 + (NSDictionary *)fileInfo:(NSString *)filePath 122 { 123 return [[NSFileManager defaultManager] attributesOfItemAtPath:[self path:filePath] 124 error:nil]; 125 } 126 127 + (int)fileSize:(NSString *)filePath 128 { 129 return [[[[NSFileManager defaultManager] attributesOfItemAtPath:[self path:filePath] 130 error:nil] \ 131 objectForKey:@"NSFileSize"] intValue]; 132 } 133 134 + (BOOL)writePlist:(id)plist to:(NSString *)filePath 135 { 136 if ([plist isKindOfClass:[NSDictionary class]]) 137 { 138 NSDictionary *point = plist; 139 140 return [point writeToFile:[self path:filePath] 141 atomically:YES]; 142 } 143 else if ([plist isKindOfClass:[NSArray class]]) 144 { 145 NSArray *point = plist; 146 147 return [point writeToFile:[self path:filePath] 148 atomically:YES]; 149 } 150 else 151 { 152 return NO; 153 } 154 } 155 156 + (NSMutableDictionary *)dictionaryFrom:(NSString *)filePath 157 { 158 NSMutableDictionary *dictionary = \ 159 [[NSMutableDictionary alloc] initWithContentsOfFile:[self path:filePath]]; 160 161 return dictionary; 162 } 163 164 + (NSMutableArray *)arrayFrom:(NSString *)filePath 165 { 166 NSMutableArray *array = \ 167 [[NSMutableArray alloc] initWithContentsOfFile:[self path:filePath]]; 168 169 return array; 170 } 171 172 + (void)path:(NSString *)filePath dictionary:(void (^)(NSMutableDictionary *dictionary))dictionary 173 { 174 NSMutableDictionary *sourceDictionary = \ 175 [[NSMutableDictionary alloc] initWithContentsOfFile:[self path:filePath]]; 176 177 dictionary(sourceDictionary); 178 179 [sourceDictionary writeToFile:[self path:filePath] 180 atomically:YES]; 181 } 182 183 + (void)path:(NSString *)filePath array:(void (^)(NSMutableArray *array))array 184 { 185 NSMutableArray *sourceArray = \ 186 [[NSMutableArray alloc] initWithContentsOfFile:[self path:filePath]]; 187 188 array(sourceArray); 189 190 [sourceArray writeToFile:[self path:filePath] 191 atomically:YES]; 192 } 193 194 @end