【IOS】史上最全文件操作NSFileManager

功能列表

//判斷文件是否存在
+ (BOOL)fileExistsAtPath:(NSString *)aPath;
//判斷文件是否存在Documents下
+ (BOOL)fileExistsAtDocumentsWithFileName:(NSString *)afileName;
//判斷文件夾是否存在
+ (BOOL)dirExistAtPath:(NSString *)aPath;


//創(chuàng)建目錄
+ (BOOL)createPath:(NSString *)aPath;
// 創(chuàng)建目錄的上級目錄
+ (BOOL)createParentDirectory:(NSString *)aPath;
// 目錄下創(chuàng)建文件
+ (BOOL)createFileWithPath:(NSString *)aPath content:(NSData *)aContent;
// documents下創(chuàng)建文件
+ (BOOL)createFileAtDocumentsWithName:(NSString *)aFilename content:(NSData *)aContent;
+ (NSString *)createFileWithName:(NSString *)aFilename content:(NSData *)aContent;
//TMP下創(chuàng)建文件
+ (NSString *)createFileAtTmpWithName:(NSString *)aFilename content:(NSData *)aContent;
// Caches下創(chuàng)建文件
+ (BOOL)createFileAtCachesWithName:(NSString *)aFilename content:(NSData *)aContent;
//在Document下創(chuàng)建文件目錄
+ (BOOL)createDirectoryAtDocument:(NSString *)aDirectory;
// 刪除文件
+ (BOOL)deleteFileWithName:(NSString *)aFileName error:(NSError **)aError;
//刪除指定路徑下的文件
+ (BOOL)deleteFileWithUrl:(NSURL *)aUrl error:(NSError **)aError;
//刪除文件夾下的所有文件
+ (BOOL)deleteAllFileAtPath:(NSString *)aPath;
//根據(jù)文件名刪除document下的文件
+ (BOOL)deleteFileAtDocumentsWithName:(NSString *)aFilename error:(NSError **)aError;


//讀取文件
+ (NSData *)readFileWithPath:(NSString *)aPath;
+ (NSData *)readFileWithURL:(NSURL *)aUrl;
+ (NSData *)readFileAtDocumentsWithFileName:(NSString *)aFileName;
//獲取臨時目錄下的所有文件列表
+ (NSArray *)getContentsOfTmpDirectorByTimeOrder;
// 獲取文件大小
+ (unsigned long long)fileSizeAtPaht:(NSString *)aPath;
//遍歷文件夾下的所有文件,不含子文件
+ (NSArray *)getContentsOfDirectoryAtPath:(NSString *)aDirString;
//遍歷文件夾下的所有文件,包含子文件
+ (NSArray *)getAllFilesAtPath:(NSString *)aDirString;
//獲取路徑下通過時間排序的文件列表
+ (NSArray *)getContentsOfDirectoryByTimeOrderAtPath:(NSString *)aDireString;


//復(fù)制一個目錄下的文件到另外一個目錄,前后兩個必須一致汹族,要么都是目錄拖吼,要么都是文件
+ (BOOL) copyItemAtPath:(NSString *)aPath toPath:(NSString *)aDestinationPath error:(NSError **)aError;
//重命名文件
+ (BOOL)renameFileNameFrom:(NSString *)aOldName toPath:(NSString *)aNewName error:(NSError **)aError;

具體實現(xiàn)


static NSFileManager *iFileManager;

+ (NSFileManager *)getNSFileManager{
    
    if (!iFileManager) {
        iFileManager = [NSFileManager defaultManager];
    }
    return iFileManager;
}

#pragma mark - >>>>>>>>> 判斷 <<<<<<<<<<<

#pragma mark - 判斷文件是否存在
+ (BOOL)fileExistsAtPath:(NSString *)aPath{
    
    BOOL result = NO;
    if (aPath) {
        result = [[self getNSFileManager] fileExistsAtPath:aPath];
    }
    return result;
}

#pragma mark - 判斷文件是否存在Documents下
+ (BOOL)fileExistsAtDocumentsWithFileName:(NSString *)afileName{
    
    BOOL result = NO;
    if (afileName) {
        NSString *fullFileNamePath = [self getFullDocumentPathWithName:afileName];
        result = [[self getNSFileManager] fileExistsAtPath:fullFileNamePath];
    }
    return result;
}

#pragma mark - 判斷文件夾是否存在
+ (BOOL)dirExistAtPath:(NSString *)aPath
{
    BOOL isDir = NO;
    BOOL result = [[self getNSFileManager] fileExistsAtPath:aPath isDirectory:&isDir];
    return result && isDir;
}

#pragma mark - >>>>>>>>>創(chuàng)建<<<<<<<<<<<

#pragma mark - 創(chuàng)建目錄
+ (BOOL)createPath:(NSString *)aPath{
    
    BOOL result = NO;
    result =[self createParentDirectory:aPath];
    if (result) {
        result = [ [self getNSFileManager] createDirectoryAtPath:aPath withIntermediateDirectories:YES attributes:nil error:nil];
    }
    return result;
}

#pragma mark - 創(chuàng)建目錄的上級目錄
+ (BOOL)createParentDirectory:(NSString *)aPath
{
    //存在上級目錄,并且上級目錄不存在的創(chuàng)建所有的上級目錄
    BOOL result = NO;
    NSString *parentPath = [self getParentPath:aPath];
    if (parentPath && ![self dirExistAtPath:parentPath]) {
        return [[self getNSFileManager] createDirectoryAtPath:parentPath withIntermediateDirectories:YES attributes:nil error:nil];
    }
    else if ([self dirExistAtPath:parentPath]){
        result = YES;
    }
    
    return result;
}

#pragma mark 目錄下創(chuàng)建文件
+ (BOOL)createFileWithPath:(NSString *)aPath content:(NSData *)aContent
{
    BOOL result = NO;
    result = [self createParentDirectory:aPath];
    if (result) {
        result = [[self getNSFileManager] createFileAtPath:aPath contents:aContent attributes:nil];
    }
    return result;
}

#pragma mark documents下創(chuàng)建文件
+ (BOOL)createFileAtDocumentsWithName:(NSString *)aFilename
                              content:(NSData *)aContent
{
    NSString *filePath =[self getFullDocumentPathWithName:aFilename];
    BOOL result = [self createFileWithPath:filePath
                                   content:aContent];
    return result;
}
+ (NSString *)createFileWithName:(NSString *)aFilename
                         content:(NSData *)aContent
{
    NSString *filePath =[self getFullDocumentPathWithName:aFilename];
    BOOL result = [self createFileWithPath:filePath
                                   content:aContent];
    if(!result)
    {
        filePath = nil;
    }
    return filePath;
}

#pragma mark TMP下創(chuàng)建文件
+ (NSString *)createFileAtTmpWithName:(NSString *)aFilename
                              content:(NSData *)aContent
{
    NSString *filePath =[self getFullTmpPathWithName:aFilename];
    BOOL result = [self createFileWithPath:filePath
                                   content:aContent];
    if(!result)
    {
        filePath = nil;
    }
    return filePath;
    
}
#pragma mark Caches下創(chuàng)建文件
+ (BOOL)createFileAtCachesWithName:(NSString *)aFilename
                           content:(NSData *)aContent
{
    NSString *filePath =[self getFullCachesPathWithName:aFilename];
    BOOL result = [self createFileWithPath:filePath
                                   content:aContent];
    return result;
}
#pragma mark 在Document下創(chuàng)建文件目錄
+ (BOOL)createDirectoryAtDocument:(NSString *)aDirectory
{
    NSString * directoryAll = [self getFullDocumentPathWithName:aDirectory];
    
    BOOL result = [ [self getNSFileManager] createDirectoryAtPath:directoryAll
                                      withIntermediateDirectories:YES
                                                       attributes:nil
                                                            error:nil];
    return result;
}

#pragma mark - >>>>>>>>>刪除<<<<<<<<<

#pragma mark 刪除文件
+ (BOOL)deleteFileWithName:(NSString *)aFileName
                     error:(NSError **)aError
{
    NSFileManager *tempFileManager = [self getNSFileManager];
    return [tempFileManager removeItemAtPath:aFileName
                                       error:aError];
}

#pragma mark - 刪除指定路徑下的文件
+ (BOOL)deleteFileWithUrl:(NSURL *)aUrl error:(NSError **)aError
{
    return [[self getNSFileManager] removeItemAtURL:aUrl error:aError];
}

#pragma mark 刪除文件夾下的所有文件
+ (BOOL)deleteAllFileAtPath:(NSString *)aPath
{
    BOOL result = NO;
    NSArray *fileArray = [self getContentsOfDirectoryAtPath:aPath];
    
    
    NSString *filePath = nil;
    
    for (int i = 0; i<[fileArray count]; i++)
    {
        filePath = [aPath stringByAppendingPathComponent:[fileArray objectAtIndex:i]];
        result = [[self getNSFileManager] removeItemAtPath:filePath
                                                     error:nil];
        if (!result)
        {
            break;
        }
        filePath = nil;
    }
    return result;
}

#pragma mark 根據(jù)文件名刪除document下的文件
+ (BOOL)deleteFileAtDocumentsWithName:(NSString *)aFilename
                                error:(NSError **)aError
{
    NSString *filePath = [self getFullDocumentPathWithName:aFilename];
    return [self deleteFileWithName:filePath
                              error:aError];
}

#pragma mark 讀取文件
+ (NSData *)readFileWithPath:(NSString *)aPath
{
    NSData *data = [NSData dataWithContentsOfFile:aPath];
    return data;
}

+ (NSData *)readFileWithURL:(NSURL *)aUrl
{
    NSData *data = [NSData dataWithContentsOfURL:aUrl];
    return data;
}
+ (NSData *)readFileAtDocumentsWithFileName:(NSString *)aFileName
{
    NSString *fullPathWithName =  [self getFullDocumentPathWithName:aFileName];
    NSData *data = [NSData dataWithContentsOfFile:fullPathWithName];
    return data;
}

#pragma mark - 獲取臨時目錄下的所有文件列表
+ (NSArray *)getContentsOfTmpDirectorByTimeOrder
{
    return [self getContentsOfDirectoryByTimeOrderAtPath:[self getTmpPath]];
}
#pragma mark - 獲取文件大小
+ (unsigned long long)fileSizeAtPaht:(NSString *)aPath
{
    return  [[[self getNSFileManager] attributesOfItemAtPath:aPath  error:nil] fileSize];
}

#pragma mark - >>>>>>>>>獲取<<<<<<<<<<<

#pragma mark - 獲取上級目錄
+ (NSString *)getParentPath:(NSString *)aPath
{
    // //刪除最后一個目錄
    return [aPath stringByDeletingLastPathComponent];
}

#pragma mark 根據(jù)文件名稱獲取documents的文件名的全路徑
+ (NSString *)getFullDocumentPathWithName:(NSString *)aFileName
{
    return [[self getDocumentPath] stringByAppendingString:aFileName];
}

#pragma mark 根據(jù)文件名稱獲取tmp的文件名的全路徑
+ (NSString *)getFullTmpPathWithName:(NSString *)aFileName
{
    return [[self getTmpPath] stringByAppendingPathComponent:aFileName];
}

#pragma mark 根據(jù)文件名稱獲取Caches的文件名的全路徑
+ (NSString *)getFullCachesPathWithName:(NSString *)aFileName
{
    return [[self getCachesPath] stringByAppendingPathComponent:aFileName];
}

+ (NSString *)getHomePath
{
    NSString *home = [@"~" stringByExpandingTildeInPath];
    return home;
}

#pragma mark 獲取documents的全路徑
+ (NSString *)getDocumentPath
{
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *result = [path objectAtIndex:0];
    return result;
}

#pragma mark 獲取tmp路徑
+ (NSString *)getTmpPath
{
    NSString *pathName = [NSHomeDirectory() stringByAppendingPathComponent:@"tmp"];
    return pathName;
}

#pragma mark 獲取caches路徑
+ (NSString *)getCachesPath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
    return [paths objectAtIndex:0];
}
#pragma mark 遍歷文件夾下的所有文件,不含子文件
+ (NSArray *)getContentsOfDirectoryAtPath:(NSString *)aDirString
{
    return [[self getNSFileManager] contentsOfDirectoryAtPath:aDirString
                                                        error:nil];
}

#pragma mark - 獲取路徑下通過時間排序的文件列表
+ (NSArray *)getContentsOfDirectoryByTimeOrderAtPath:(NSString *)aDireString
{
    NSArray *files = [self getAllFilesAtPath:(NSString *)aDireString];
    
    NSMutableArray *iUrls = [[NSMutableArray alloc] initWithCapacity:1];
    NSArray *sortedFiles = nil;
    
    if([files count] > 0)
    {
        sortedFiles = [files sortedArrayUsingComparator:^(NSString *url1, NSString *url2)
                       {
                           
                           NSDictionary *fileAttributes1 = [[self getNSFileManager] attributesOfItemAtPath:url1
                                                                                                     error:nil];
                           
                           NSDictionary *fileAttributes2 = [[self getNSFileManager] attributesOfItemAtPath:url2
                                                                                                     error:nil];
                           NSDate *date1 = [fileAttributes1 objectForKey:NSFileCreationDate] ;
                           
                           NSDate *date2 = [fileAttributes2 objectForKey:NSFileCreationDate] ;
                           return [date2 compare:date1];
                       }];
    }
    
    for (int i = 0; i < [sortedFiles count]; i++)
    {
        NSURL *url = [NSURL fileURLWithPath:[sortedFiles objectAtIndex:i]];
        [iUrls addObject:url];
    }
    
    return iUrls;
    
}

#pragma mark - 遍歷文件夾下的所有文件,包含子文件
+ (NSArray *)getAllFilesAtPath:(NSString *)aDirString
{
    NSMutableArray *tempPathArray = [NSMutableArray array];
    NSArray *tempArray =[self getContentsOfDirectoryAtPath:aDirString];
    NSString *fullPath = nil;
    
    for (NSString *fileNmae in tempArray) {
        BOOL flag = YES;
        fullPath = [aDirString stringByAppendingPathComponent:fileNmae];
        //判斷是否存在
        if ([[self getNSFileManager] fileExistsAtPath:fullPath isDirectory:&flag]) {
            //不是目錄,直接添加
            if (![[fileNmae substringToIndex:1]isEqualToString:@"."]) {
                [tempPathArray addObject:fullPath];
            }
            //如果是目錄,一當前文件夾為key,文件夾下的子文件名為value,遞歸調(diào)用
            else{
                NSArray *subPathArray =[self getAllFilesAtPath:fullPath];
                [tempPathArray addObjectsFromArray:subPathArray];
                
            }
        }
        fullPath = nil;
    }
    NSArray *resultArray = [NSArray arrayWithArray:tempPathArray];
    return resultArray;
    
}


#pragma mark 復(fù)制一個目錄下的文件到另外一個目錄,前后兩個必須一致晒奕,要么都是目錄开瞭,要么都是文件
+ (BOOL) copyItemAtPath:(NSString *)aPath
                 toPath:(NSString *)aDestinationPath
                  error:(NSError **)aError
{
    NSFileManager *tempFileManager = [self getNSFileManager];
    return [tempFileManager copyItemAtPath:aPath
                                    toPath:aDestinationPath
                                     error:aError];
}

#pragma mark 重命名文件
+ (BOOL)renameFileNameFrom:(NSString *)aOldName
                    toPath:(NSString *)aNewName
                     error:(NSError **)aError{
    NSFileManager *tempFileManager = [self getNSFileManager];
    BOOL result =  [tempFileManager moveItemAtPath:aOldName
                                            toPath:aNewName
                                             error:aError];
    return result;
}


@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子点把,更是在濱河造成了極大的恐慌,老刑警劉巖屿附,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件郎逃,死亡現(xiàn)場離奇詭異,居然都是意外死亡挺份,警方通過查閱死者的電腦和手機褒翰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匀泊,“玉大人优训,你說我怎么就攤上這事「髌福” “怎么了揣非?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長伦吠。 經(jīng)常有香客問我妆兑,道長,這世上最難降的妖魔是什么毛仪? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任搁嗓,我火速辦了婚禮,結(jié)果婚禮上箱靴,老公的妹妹穿的比我還像新娘腺逛。我一直安慰自己,他們只是感情好衡怀,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布棍矛。 她就那樣靜靜地躺著安疗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪够委。 梳的紋絲不亂的頭發(fā)上荐类,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音茁帽,去河邊找鬼玉罐。 笑死,一個胖子當著我的面吹牛潘拨,可吹牛的內(nèi)容都是我干的吊输。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼铁追,長吁一口氣:“原來是場噩夢啊……” “哼季蚂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起琅束,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤扭屁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后狰闪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疯搅,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年埋泵,在試婚紗的時候發(fā)現(xiàn)自己被綠了幔欧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡丽声,死狀恐怖礁蔗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雁社,我是刑警寧澤浴井,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站霉撵,受9級特大地震影響磺浙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜徒坡,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一撕氧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喇完,春花似錦伦泥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽府怯。三九已至,卻和暖如春防楷,著一層夾襖步出監(jiān)牢的瞬間牺丙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工复局, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赘被,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓肖揣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浮入。 傳聞我的和親對象是個殘疾皇子龙优,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,071評論 25 707
  • 不知道從何時起彤断,每年一度的兒童節(jié),成了我們這些大人的狂歡日易迹,每年都有新花樣宰衙,今年也不例外。曬童年時的玩具睹欲,發(fā)童年照...
    大俗小雅閱讀 684評論 0 2
  • 杭州的美供炼,不在于人,而在于每一寸土地 來到杭州也有幾日了窘疮,煙雨朦朧中掠過西湖幾多風景袋哼。景依舊,心情不再闸衫,再美麗景色...
    熊先生頻道MrBearTV閱讀 153評論 0 0
  • 造化之力神奇涛贯,時間卻比造化更加神奇。 人生 既欣賞不食人間煙火的詩意 也欣賞柴米油鹽的現(xiàn)世安穩(wěn) 有酒有故事 ...
    藍莫瀟驍閱讀 426評論 12 6
  • “在那海水酣睡的宮殿里, 鋪滿了多少奇珍異寶骄酗∠∮啵” 在人們眼中 海洋是美麗而又神秘的 畫家筆下的海同樣富有魅力 也許...
    藝伙閱讀 171評論 0 3