123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- //
- // ZGFileUtils.m
- // GJTools
- //
- // Created by zhuge on 15/11/5.
- // Copyright (c) 2015年 zhuge. All rights reserved.
- //
- #import "ZGFileUtils.h"
- @implementation ZGFileUtils
- #pragma mark file reading
- +(NSArray*) readFileToLineArray:(NSString *)path {
- NSString *strs = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
- return [strs componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
- }
- #pragma mark file operating
- +(BOOL)fileExist:(NSString*)filePath {
- return [[NSFileManager defaultManager] fileExistsAtPath:filePath];
- }
- +(BOOL)pathIsDirectory:(NSString*)path {
- BOOL isDir;
- if ([[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir]) {
- return isDir;
- }
- return NO;
- }
- +(void)createDirectoryIfNotExist:(NSString*)dir {
- NSFileManager *fm = [NSFileManager defaultManager];
- if (![fm fileExistsAtPath:dir]) {
- [fm createDirectoryAtPath:dir withIntermediateDirectories:YES attributes:nil error:nil];
- }
- }
- +(void)deleteFileOrDirectoryAtPath:(NSString*)path {
- if (![ZGFileUtils fileExist:path]) {
- return;
- }
- NSFileManager *fm = [NSFileManager defaultManager];
- NSError *err = nil;
- [fm removeItemAtPath:path error:&err];
- if (err) {
- NSLog(@"%@", [err localizedDescription]);
- }
- }
- +(void)cleanPath:(NSString *)path {
- [ZGFileUtils deleteFileOrDirectoryAtPath:path];
- [ZGFileUtils createDirectoryIfNotExist:path];
- }
- +(void)moveFileAtPath:(NSString *)filePath toPath:(NSString *)toPath {
- [ZGFileUtils createDirectoryIfNotExist:[toPath stringByDeletingLastPathComponent]];
- [ZGFileUtils execSync:@"/bin/mv" args:[NSArray arrayWithObjects:filePath, toPath, nil]];
- NSLog(@"%@ -----> %@", [filePath lastPathComponent], [toPath lastPathComponent]);
- }
- +(void)copyFileFromPath:(NSString *)fromPath toPath:(NSString*) toPath {
- [ZGFileUtils createDirectoryIfNotExist:[toPath stringByDeletingLastPathComponent]];
- [ZGFileUtils execSync:@"/bin/cp" args:@[@"-f", fromPath, toPath]];
- NSLog(@"File:%@ ---copy> %@", fromPath, toPath);
- }
- +(void)copyDirectoryFromPath:(NSString *)fromPath toPath:(NSString*) toPath {
- [ZGFileUtils createDirectoryIfNotExist:[toPath stringByDeletingLastPathComponent]];
- [ZGFileUtils execSync:@"/bin/cp" args:[NSArray arrayWithObjects:@"-rf", fromPath, toPath, nil]];
- NSLog(@"Dir:%@ --copy-->%@", fromPath, toPath);
- }
- +(void)replaceFileContentAtPath:(NSString*)path withDictionary:(NSDictionary*)dic {
- //sort first
- NSArray *sortedKeys = [[[[dic allKeys] sortedArrayUsingSelector: @selector(compare:)] reverseObjectEnumerator] allObjects];
-
- NSError *err = nil;
- NSString *fileString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&err];
- if (err) {
- NSLog(@"%@", [err localizedDescription]);
- }
- BOOL isReplaced = NO;
- for (NSString *key in sortedKeys) {
- NSString *value = [dic objectForKey:key];
- if ([fileString rangeOfString:key].location != NSNotFound) {
- isReplaced = YES;
- fileString = [fileString stringByReplacingOccurrencesOfString:key withString:value];
- }
- }
- if (isReplaced) {
- NSLog(@"File:%@ is replaced", [path lastPathComponent]);
- [fileString writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
- }
- }
- +(NSArray*) directorysAtDirNoRecursion:(NSString*)directory {
- NSMutableArray *retArray = [NSMutableArray arrayWithCapacity:0];
- NSArray *fileArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directory error:nil];
- for (NSString *name in fileArray) {
- NSString *fileName = [NSString stringWithFormat:@"%@/%@", directory, name];
- if ([ZGFileUtils pathIsDirectory:fileName] && ![name hasPrefix:@"."]) {
- [retArray addObject:fileName];
- }
- }
- return retArray;
- }
- +(NSArray*) directorysAtDirRecursion:(NSString*)directory filterArray:(NSArray*)filterArray {
- NSMutableArray *retArray = [NSMutableArray arrayWithCapacity:0];
- NSArray *fileArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directory error:nil];
- for (NSString *name in fileArray) {
- NSString *fileName = [NSString stringWithFormat:@"%@/%@", directory, name];
- if ([ZGFileUtils pathIsDirectory:fileName]) {
- NSArray *inArray = [ZGFileUtils directorysAtDirRecursion:fileName filterArray:filterArray];
- [retArray addObjectsFromArray:inArray];
- if ([filterArray containsObject:name]) {
- [retArray addObject:fileName];
- }
- }
- }
- return retArray;
- }
- +(NSArray*) arrayOfFileAtDirRecursion:(NSString*)directory {
- NSMutableArray *retArray = [NSMutableArray arrayWithCapacity:0];
- NSArray *fileArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directory error:nil];
- for (int i = 0; i < [fileArray count]; i++) {
- if ([@".DS_Store" isEqualToString:fileArray[i]]) {
- continue;
- }
- NSString *fileName = [NSString stringWithFormat:@"%@/%@", directory, [fileArray objectAtIndex:i]];
- if (![ZGFileUtils pathIsDirectory:fileName]) {
- [retArray addObject:fileName];
- } else {
- [retArray addObjectsFromArray:[ZGFileUtils arrayOfFileAtDirRecursion:fileName]];
- }
- }
- return retArray;
- }
- +(NSArray*) arrayOfFileAtDir:(NSString*)directory extensionFilterArray:(NSArray*)extensionFilterArray {
- NSMutableArray *retArray = [NSMutableArray arrayWithCapacity:0];
- NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directory error:nil];
- for (NSString *file in files) {
- if ([@".DS_Store" isEqualToString:file]) {
- continue;
- }
- NSString *fileName = [NSString stringWithFormat:@"%@/%@", directory, file];
- if (![ZGFileUtils pathIsDirectory:fileName]) {
- NSString *ext = [fileName pathExtension];
- if ([extensionFilterArray containsObject:ext]) {
- [retArray addObject:fileName];
- }
- }
- }
- return retArray;
- }
- +(NSArray*) arrayOfFileAtDirRecursion:(NSString*)directory extensionFilterArray:(NSArray*)extensionFilterArray {
- NSMutableArray *retArray = [NSMutableArray arrayWithCapacity:0];
- NSArray *fileArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directory error:nil];
- for (int i = 0; i < [fileArray count]; i++) {
- NSString *fileName = [NSString stringWithFormat:@"%@/%@", directory, [fileArray objectAtIndex:i]];
- if (![ZGFileUtils pathIsDirectory:fileName]) {
- NSString *extension = [fileName pathExtension];
- if ([extensionFilterArray containsObject:extension]) {
- [retArray addObject:fileName];
- }
- } else {
- [retArray addObjectsFromArray:[ZGFileUtils arrayOfFileAtDirRecursion:fileName extensionFilterArray:extensionFilterArray]];
- }
- }
- return retArray;
- }
- +(NSArray*) arrayOfFileAtDirRecursion:(NSString*)directory extensionFilterArray:(NSArray*)extensionFilterArray ignorePaths:(NSArray *)ignorePaths {
- NSMutableArray *retArray = [NSMutableArray arrayWithCapacity:0];
- NSArray *fileArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directory error:nil];
- for (int i = 0; i < [fileArray count]; i++) {
- NSString *fileName = [NSString stringWithFormat:@"%@/%@", directory, [fileArray objectAtIndex:i]];
- if (![ZGFileUtils pathIsDirectory:fileName]) {
- BOOL needAdd = true;
- NSString *extension = [fileName pathExtension];
- if (![extensionFilterArray containsObject:extension]) {
- needAdd = false;
- }
- if (needAdd) {
- for (NSString *ignorePath in ignorePaths) {
- if ([fileName rangeOfString:ignorePath].location != NSNotFound) {
- needAdd = false;
- }
- }
- }
- if (needAdd) {
- [retArray addObject:fileName];
- }
- } else {
- [retArray addObjectsFromArray:[ZGFileUtils arrayOfFileAtDirRecursion:fileName extensionFilterArray:extensionFilterArray ignorePaths:ignorePaths]];
- }
- }
- return retArray;
- }
- +(NSArray*) filesInDirectory:(NSString *)directory fileNameWithoutExtension:(NSString*)fileNameWithoutExtension {
- NSMutableArray *retArray = [NSMutableArray arrayWithCapacity:0];
- NSArray *fileArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directory error:nil];
- for (int i = 0; i < [fileArray count]; i++) {
- NSString *fileName = [NSString stringWithFormat:@"%@/%@", directory, [fileArray objectAtIndex:i]];
- if (![ZGFileUtils pathIsDirectory:fileName]) {
- NSString *got = [[fileName lastPathComponent] stringByDeletingPathExtension];
- if ([fileNameWithoutExtension isEqualToString:got]) {
- [retArray addObject:fileName];
- }
- } else {
- [retArray addObjectsFromArray:[ZGFileUtils filesInDirectory:fileName fileNameWithoutExtension:fileNameWithoutExtension]];
- }
- }
- return retArray;
- }
- +(void) zipDirectory:(NSString*)directory {
- NSString *parentPath = [directory stringByDeletingLastPathComponent];
- NSString *folderName = [directory lastPathComponent];
- NSString *toPath = [NSString stringWithFormat:@"%@/%@.zip", parentPath, folderName];
- [ZGFileUtils zipDirectory:directory toPath:toPath];
- }
- +(void) zipDirectory:(NSString *)directory toPath:(NSString *)toPath {
- [ZGFileUtils deleteFileOrDirectoryAtPath:toPath];
- NSArray *args = @[@"-r", toPath, [directory lastPathComponent]];
-
- NSTask *task = [[NSTask alloc] init];
- [task setCurrentDirectoryPath:[directory stringByDeletingLastPathComponent]];
- [task setLaunchPath:@"/usr/bin/zip"];
- [task setArguments:args];
-
- [task launch];
- [task waitUntilExit];
- }
- #pragma mark private methods
- +(void)execSync:(NSString *)cmd args:(NSArray *)args {
- NSTask *currentTask = [[NSTask alloc] init];
- [currentTask setLaunchPath:cmd];
- NSMutableDictionary *environmentDict = [NSMutableDictionary dictionaryWithDictionary:[[NSProcessInfo processInfo] environment]];
- NSString *path = [environmentDict objectForKey:@"PATH"];
- [environmentDict setValue:path forKey:@"PATH"];
- [currentTask setEnvironment:environmentDict];
-
- // Set arguments
- [currentTask setArguments:args];
- // set input
-
- [currentTask launch];
- [currentTask waitUntilExit];
- }
- @end
|