iOS NSFileManager

簡介

由于項目需要琅束,整理了一份文件處理的方法碰纬。

下面是一些常用的方法:

獲取Document路徑

+ (NSString *)getDocumentPath
{

 NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

 return [filePaths objectAtIndex:0];

}

獲取Library路徑

+ (NSString *)getLibraryPath
{
  
  NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);

  return [filePaths objectAtIndex:0];
}

獲取應用程序路徑

+ (NSString *)getApplicationPath
{

  return NSHomeDirectory();

}

獲取Cache路徑

+ (NSString *)getCachePath
{

  NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

  return [filePaths objectAtIndex:0];

}

獲取Temp路徑

+ (NSString *)getTempPath
{

  return NSTemporaryDirectory();

}

判斷文件是否存在于某個路徑中

+ (BOOL)fileIsExistOfPath:(NSString *)filePath
{

  BOOL flag = NO;

  NSFileManager *fileManager = [NSFileManager defaultManager];

  if ([fileManager fileExistsAtPath:filePath]) {
  
    flag = YES;

  } else {
  
    flag = NO;

  }

  return flag;
 
}

從某個路徑中移除文件

+ (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:刪除最后一個路徑節(jié)點

  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;

}

追加寫文件

+ (BOOL)appendData:(NSData *)data withPath:(NSString *)path
{

  BOOL result = [self creatFileWithPath:path];

  if (result) {
  
    NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:path];
  
    [handle seekToEndOfFile];
  
    [handle writeData:data];
  
    [handle synchronizeFile];
  
    [handle closeFile];
  
    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;

}

移動文件

+ (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)建時間

+ (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;

}

獲取文件的信息(包含了上面文件大小)

+(NSDictionary*)getFileInfo:(NSString*)path{

   NSError *error;

  NSDictionary *reslut =  [[NSFileManager defaultManager] attributesOfItemAtPath:path error:&error];

  if (error) {
  
    NSLog(@"getFileInfo Failed:%@",[error localizedDescription]);

  }

  return reslut;

}

創(chuàng)建文件目錄

- (void)createDir {

  NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

  NSString *dataFilePath = [docsdir stringByAppendingPathComponent:@"archiver"]; // 在Document目錄下創(chuàng)建 "archiver" 文件夾

  NSFileManager *fileManager = [NSFileManager defaultManager];

  BOOL isDir = NO;

  // fileExistsAtPath 判斷一個文件或目錄是否有效书蚪,isDirectory判斷是否一個目錄
  BOOL existed = [fileManager fileExistsAtPath:dataFilePath isDirectory:&isDir];

  if (!(isDir && existed)) {
    // 在Document目錄下創(chuàng)建一個archiver目錄
    [fileManager createDirectoryAtPath:dataFilePath withIntermediateDirectories:YES attributes:nil error:nil];
  }

  // 在archiver下寫入文件
  NSString *path = [dataFilePath stringByAppendingPathComponent:@"my.txt"];
  
  NSString *text = @"It's a beautiful day.";

  BOOL writeSuccess = [text writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];

  if (writeSuccess) {
      NSLog(@"寫入成功");
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子旗扑,更是在濱河造成了極大的恐慌,老刑警劉巖慈省,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臀防,死亡現(xiàn)場離奇詭異,居然都是意外死亡边败,警方通過查閱死者的電腦和手機袱衷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笑窜,“玉大人致燥,你說我怎么就攤上這事∨沤兀” “怎么了嫌蚤?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長断傲。 經(jīng)常有香客問我脱吱,道長,這世上最難降的妖魔是什么认罩? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任箱蝠,我火速辦了婚禮,結(jié)果婚禮上垦垂,老公的妹妹穿的比我還像新娘宦搬。我一直安慰自己,他們只是感情好乔外,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布床三。 她就那樣靜靜地躺著,像睡著了一般杨幼。 火紅的嫁衣襯著肌膚如雪撇簿。 梳的紋絲不亂的頭發(fā)上聂渊,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機與錄音四瘫,去河邊找鬼汉嗽。 笑死,一個胖子當著我的面吹牛找蜜,可吹牛的內(nèi)容都是我干的饼暑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼洗做,長吁一口氣:“原來是場噩夢啊……” “哼弓叛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诚纸,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤撰筷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后畦徘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毕籽,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年井辆,在試婚紗的時候發(fā)現(xiàn)自己被綠了关筒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡杯缺,死狀恐怖蒸播,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夺谁,我是刑警寧澤廉赔,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站匾鸥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碉纳。R本人自食惡果不足惜勿负,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劳曹。 院中可真熱鬧奴愉,春花似錦、人聲如沸铁孵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜕劝。三九已至檀头,卻和暖如春轰异,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暑始。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工搭独, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人廊镜。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓牙肝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗤朴。 傳聞我的和親對象是個殘疾皇子配椭,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

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

  • 前言:iOS的沙盒機制,應用只能訪問自己應用目錄下的文件雹姊。iOS不像android股缸,沒有SD卡概念,不能直接訪問圖...
    ChinaSwift閱讀 2,199評論 1 12
  • NSFileManager是一個單例類容为,也是一個文件管理器乓序。可以通過NSFileManager創(chuàng)建文件夾坎背、創(chuàng)建文件...
    _YZG_閱讀 6,317評論 0 6
  • 使用NSFileManager 文件系統(tǒng)接口 允許訪問文件夾內(nèi)容 創(chuàng)建替劈,重命名,刪除文件得滤,修改文件和文件屬性陨献,以及...
    揚揚揚閱讀 9,305評論 2 11
  • 關于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,912評論 2 89
  • 也不是所有人都適合做減法的,像我這種本來就沒什么強烈意志的懂更,減著減著就沒了吧眨业? 文中的“硬通貨”/...
    不覺曉閱讀 261評論 0 0