iOS 文件(NSFileManager)及 文件內(nèi)容(NSFileHandle) 基礎(chǔ)使用

NSFileManager

此類主要是對(duì)文件進(jìn)行的操作以及文件信息的獲取

判斷文件是否存在于某個(gè)路徑中

+ (BOOL)fileIsExistOfPath:(NSString *)filePath
{
    BOOL flag = NO;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:filePath]) {
        flag = YES;
    } else {
        flag = NO;
    }
    return flag;
}

從某個(gè)路徑中移除文件

+ (BOOL)removeFileOfPath:(NSString *)filePath
{
    BOOL flag = YES;
    NSFileManager *fileManage = [NSFileManager defaultManager];
    if ([fileManage fileExistsAtPath:filePath]) {
        if (![fileManage removeItemAtPath:filePath error:nil]) {
            flag = NO;
        }
    }
    return flag;
}

從URL路徑中移除文件

- (BOOL)removeFileOfURL:(NSURL *)fileURL
{
    BOOL flag = YES;
    NSFileManager *fileManage = [NSFileManager defaultManager];
    if ([fileManage fileExistsAtPath:fileURL.path]) {
        if (![fileManage removeItemAtURL:fileURL error:nil]) {
            flag = NO;
        }
    }
    return flag;
}

創(chuàng)建文件夾

+(BOOL)creatDirectoryWithPath:(NSString *)dirPath
{
    BOOL ret = YES;
    BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:dirPath];
    if (!isExist) {
        NSError *error;
        BOOL isSuccess = [[NSFileManager defaultManager] createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:&error];
        if (!isSuccess) {
            ret = NO;
            NSLog(@"creat Directory Failed. errorInfo:%@",error);
        }
    }
    return ret;
}

創(chuàng)建文件

+ (BOOL)creatFileWithPath:(NSString *)filePath
{
    BOOL isSuccess = YES;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL temp = [fileManager fileExistsAtPath:filePath];
    if (temp) {
        return YES;
    }
    NSError *error;
    //stringByDeletingLastPathComponent:刪除最后一個(gè)路徑節(jié)點(diǎn)
    NSString *dirPath = [filePath stringByDeletingLastPathComponent];
    isSuccess = [fileManager createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:&error];
    if (error) {
        NSLog(@"creat File Failed. errorInfo:%@",error);
    }
    if (!isSuccess) {
        return isSuccess;
    }
    isSuccess = [fileManager createFileAtPath:filePath contents:nil attributes:nil];
    return isSuccess;
}

保存文件

+ (BOOL)saveFile:(NSString *)filePath withData:(NSData *)data
{
    BOOL ret = YES;
    ret = [self creatFileWithPath:filePath];
    if (ret) {
        ret = [data writeToFile:filePath atomically:YES];
        if (!ret) {
            NSLog(@"%s Failed",__FUNCTION__);
        }
    } else {
        NSLog(@"%s Failed",__FUNCTION__);
    }
    return ret;
}

移動(dòng)文件

+ (BOOL)moveFileFromPath:(NSString *)fromPath toPath:(NSString *)toPath
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:fromPath]) {
        NSLog(@"Error: fromPath Not Exist");
        return NO;
    }
    if (![fileManager fileExistsAtPath:toPath]) {
        NSLog(@"Error: toPath Not Exist");
        return NO;
    }
    NSString *headerComponent = [toPath stringByDeletingLastPathComponent];
    if ([self creatFileWithPath:headerComponent]) {
        return [fileManager moveItemAtPath:fromPath toPath:toPath error:nil];
    } else {
        return NO;
    }
}

拷貝文件

+(BOOL)copyFileFromPath:(NSString *)fromPath toPath:(NSString *)toPath
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:fromPath]) {
        NSLog(@"Error: fromPath Not Exist");
        return NO;
    }
    if (![fileManager fileExistsAtPath:toPath]) {
        NSLog(@"Error: toPath Not Exist");
        return NO;
    }
    NSString *headerComponent = [toPath stringByDeletingLastPathComponent];
    if ([self creatFileWithPath:headerComponent]) {
        return [fileManager copyItemAtPath:fromPath toPath:toPath error:nil];
    } else {
        return NO;
    }
}

獲取文件夾下文件列表

+ (NSArray *)getFileListInFolderWithPath:(NSString *)path
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *fileList = [fileManager contentsOfDirectoryAtPath:path error:&error];
    if (error) {
        NSLog(@"getFileListInFolderWithPathFailed, errorInfo:%@",error);
    }
    return fileList;
}

獲取文件大小

+ (long long)getFileSizeWithPath:(NSString *)path
{
    unsigned long long fileLength = 0;
    NSNumber *fileSize;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path error:nil];
    if ((fileSize = [fileAttributes objectForKey:NSFileSize])) {
        fileLength = [fileSize unsignedLongLongValue]; //單位是 B
    }
    return fileLength / 1000; 換算為K
}

獲取文件創(chuàng)建時(shí)間

+ (NSString *)getFileCreatDateWithPath:(NSString *)path
{
    NSString *date = nil;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path error:nil];
    date = [fileAttributes objectForKey:NSFileCreationDate];
    return date;
}

獲取文件所有者

+ (NSString *)getFileOwnerWithPath:(NSString *)path
{
    NSString *fileOwner = nil;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path error:nil];
    fileOwner = [fileAttributes objectForKey:NSFileOwnerAccountName];
    return fileOwner;
}

獲取文件更改日期

+ (NSString *)getFileChangeDateWithPath:(NSString *)path
{
    NSString *date = nil;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path error:nil];
    date = [fileAttributes objectForKey:NSFileModificationDate];
    return date;
}

NSFileHandle

此類主要是對(duì)文件內(nèi)容進(jìn)行讀取和寫入操作

// 打開一個(gè)文件準(zhǔn)備讀取
+ (id)fileHandleForReadingAtPath:(NSString *)path  

// 打開一個(gè)文件準(zhǔn)備寫入
+ (id)fileHandleForWritingAtPath:(NSString *)path  

// 打開一個(gè)文件準(zhǔn)備更新
+ (id)fileHandleForUpdatingAtPath:(NSString *)path  

// 從設(shè)備或通道返回可用的數(shù)據(jù)
-  (NSData *)availableData; 

// 從當(dāng)前的節(jié)點(diǎn)讀取到文件的末尾
-  (NSData *)readDataToEndOfFile; 

// 從當(dāng)前節(jié)點(diǎn)開始讀取指定的長(zhǎng)度
-  (NSData *)readDataOfLength:(NSUInteger)length; 


// 寫入數(shù)據(jù)
-  (void)writeData:(NSData *)data; 

// 獲取當(dāng)前文件的偏移量
-  (unsigned long long)offsetInFile;  

// 跳到指定文件的偏移量
-  (void)seekToFileOffset:(unsigned long long)offset; 

// 跳到文件末尾
-  (unsigned long long)seekToEndOfFile; 

// 將文件的長(zhǎng)度設(shè)為offset字節(jié)
-  (void)truncateFileAtOffset:(unsigned long long)offset; 

// 關(guān)閉文件
-  (void)closeFile;  
NSFileHandle使用介紹

向文件追加數(shù)據(jù)

+ (BOOL)appendData:(NSData *)data withPath:(NSString *)path
{
    BOOL result = [self creatFileWithPath:path];
    if (result) {
        NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:path];
        [handle seekToEndOfFile];  將節(jié)點(diǎn)跳到文件的末尾
        [handle writeData:data];      追加寫入數(shù)據(jù)
        [handle synchronizeFile];    同步文件
        [handle closeFile];                關(guān)閉文件
        return YES;
    } else {
        NSLog(@"%s Failed",__FUNCTION__);
        return NO;
    }
}

//獲取文件

+ (NSData *)getFileData:(NSString *)filePath
{
    NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
    NSData *fileData = [handle readDataToEndOfFile];
    [handle closeFile];
    return fileData;
}

//讀取文件
+ (NSData *)getFileData:(NSString *)filePath startIndex:(long long)startIndex length:(NSInteger)length
{
    NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
    [handle seekToFileOffset:startIndex];
    NSData *data = [handle readDataOfLength:length];
    [handle closeFile];
    return data;
}

說明: 我們對(duì)于一般的圖片資源的儲(chǔ)存,一般都是將圖片轉(zhuǎn)成二進(jìn)制數(shù)據(jù),然后寫入到特定文件夾下的
// stringByAppendingPathComponent 拼接一個(gè)文件路徑會(huì)自動(dòng)在前面加上 '/'
NSString * filePath = [path stringByAppendingPathComponent:@"admin.plist"];

復(fù)制文件

NSFileHandle *infile, *outfile; 輸入文件忱反、輸出文件

NSData *buffer; 讀取的緩沖數(shù)據(jù)

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *homePath = NSHomeDirectory( );

NSString *sourcePath = [homePath stringByAppendingPathComponent:@"testfile.txt"];  源文件路徑

NSString *outPath = [homePath stringByAppendingPathComponent:@"outfile.txt"]; 輸出文件路徑

BOOL sucess  = [fileManager createFileAtPath:outPath contents:nil attributes:nil];

if (!success){
return N0;
}

infile = [NSFileHandle fileHandleForReadingAtPath:sourcePath]; 創(chuàng)建讀取源路徑文件

if (infile == nil){
return NO;
}

outfile = [NSFileHandle fileHandleForReadingAtPath:outPath];創(chuàng)建并打開要輸出的文件

if (outfile == nil){
return NO;
}

[outfile truncateFileAtOffset:0]; 將輸出文件的長(zhǎng)度設(shè)為0

buffer = [infile readDataToEndOfFile];  讀取數(shù)據(jù)

[outfile writeData:buffer];  寫入輸入

[infile closeFile];        關(guān)閉寫入、輸入文件

[outfile closeFile]笼吟;
文章參考

iOS中NSFileManager文件常用操作整合
iOS NSFileHandle 基本用法介紹

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吭狡,一起剝皮案震驚了整個(gè)濱河市煞赢,隨后出現(xiàn)的幾起案子扼睬,更是在濱河造成了極大的恐慌偷溺,老刑警劉巖蹋辅,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異挫掏,居然都是意外死亡侦另,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門尉共,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褒傅,“玉大人,你說我怎么就攤上這事袄友〉钔校” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵剧蚣,是天一觀的道長(zhǎng)支竹。 經(jīng)常有香客問我,道長(zhǎng)鸠按,這世上最難降的妖魔是什么礼搁? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮目尖,結(jié)果婚禮上馒吴,老公的妹妹穿的比我還像新娘。我一直安慰自己瑟曲,他們只是感情好募书,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著测蹲,像睡著了一般莹捡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扣甲,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天篮赢,我揣著相機(jī)與錄音,去河邊找鬼琉挖。 笑死启泣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的示辈。 我是一名探鬼主播寥茫,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼矾麻!你這毒婦竟也來了纱耻?” 一聲冷哼從身側(cè)響起芭梯,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弄喘,沒想到半個(gè)月后玖喘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蘑志,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年累奈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片急但。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡澎媒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出波桩,到底是詐尸還是另有隱情戒努,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布突委,位于F島的核電站柏卤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏匀油。R本人自食惡果不足惜缘缚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望敌蚜。 院中可真熱鬧桥滨,春花似錦、人聲如沸弛车。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纷跛。三九已至喻括,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贫奠,已是汗流浹背唬血。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唤崭,地道東北人拷恨。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谢肾,于是被迫代替她去往敵國(guó)和親腕侄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • 一、iOS中的沙盒機(jī)制 iOS應(yīng)用程序只能對(duì)自己創(chuàng)建的文件系統(tǒng)讀取文件冕杠,這個(gè)獨(dú)立微姊、封閉、安全的空間拌汇,叫做沙盒柒桑。它一...
    1d5cb7cff98d閱讀 1,771評(píng)論 0 0
  • iOS開發(fā)-文件管理(一) 一弊决、iOS中的沙盒機(jī)制 iOS應(yīng)用程序只能對(duì)自己創(chuàng)建的文件系統(tǒng)讀取文件噪舀,這個(gè)獨(dú)立、封閉...
    MacShare閱讀 1,800評(píng)論 0 6
  • 27飘诗、ViewController的didReceiveMemoryWarning是在什么時(shí)候調(diào)用的与倡?默認(rèn)的操作是...
    煙雨平生花飛舞閱讀 580評(píng)論 0 1
  • 一、iOS中的沙盒機(jī)制 iOS應(yīng)用程序只能對(duì)自己創(chuàng)建的文件系統(tǒng)讀取文件昆稿,這個(gè)獨(dú)立纺座、封閉、安全的空間溉潭,叫做沙盒净响。它一...
    tzhtodd閱讀 1,280評(píng)論 0 2
  • 演唱:莫文蔚 我想親口說再見 你的空位還在這 在開始之前馋贤,句點(diǎn)后面 存活在我里面 不散,不見 你是我世界起點(diǎn) 我是...
    芥言諠既閱讀 270評(píng)論 0 0