<OC的文件操作>

NSFileManager 文件管理器完成文件的創建、移動、拷貝等管理操作
1.查詢文件和目錄
 OC中查詢路徑下的目錄主要分爲淺度遍歷和深度遍歷。
 淺度遍歷
 NSFileManager * manager = [NSFileManager defaultManager];//創建文件管理器,+方法
 NSError * error = nil; //存數錯誤信息
 NSArray * array = [manager contentsOfDirectoryAtPath:@"/tmp" error:&error];
 //查詢目錄“/tmp”下的文件和目錄,此函數返回值類型爲NSArray *
 這種查詢方法,只看一級目錄,只看所查目錄,不看子目錄
 深度遍歷
 NSArray * array = [manager subpathsOfDirectoryAtPath: @"/tmp" error: &error];
 這種方法查看所查目錄和其所有子目錄下的文件
2.創建目錄
 [manager createDirectoryAtPath:@"./1/2" withIntermediateDirectories:YES attributes:nil error:&error];
 //第一個參數指目錄創建的位置,這裏”./”,爲當前目錄,指程序所在目錄
 //第二個參數,是否創建中間目錄,意思爲我們目的創建2目錄,若1無的話,先創建1,再創建2
 //第三個,指目錄的屬性,其權限等東西,我們可以設爲nil暫時不考慮
3.創建文件
 [manager createFileAtPath:@"./hello/world/1.txt" contents:nil attributes:nil];//創建一個名爲1.txt的文件
 //第二個參數,指以什麼內容創建,nil爲空文件
 //第三個參數,文件的亞屬性,我們這裏不考慮,nil設置
 //此函數返回值爲BOOL型,YES創建成功,NO失敗
4.拷貝目錄或文件
 [manager copyItemAtPath:@"./hello/world" toPath:@"./world" error:&error];
 //拷貝目錄或文件,拷貝目錄時,會把目錄下的文件和子目錄都拷走
 //第二個參數,必須寫上拷過來之後的重命名
 //第一個參數,必須是一個存在的目錄或文件,第二個參數必須是一個不存在的目錄或文件
 //這程序表示,hello下的world拷貝到當前目錄,改名爲world
5.移動/剪切目錄和文件
 [manager moveItemAtPath:@"/tmp/dir1" toPath:@"./dir1" error:&error];//需注意的地方,與拷貝類似
6.刪除目錄和文件
 [manager removeItemAtPath:@"./dir1" error:&error];//與移動類似,只是沒有了目標位置
7.判斷文件是否存在
 [manager fileExistsAtPath:@"./1.txt"];//返回值爲BOOL,YES爲存在
 NSFileHandle 文件句柄 文件的讀寫修改操作
 對文件內容進行操作,我們需要一個新的類NSData來幫助我們。NSData可以創建一個用來存儲數據的對象,進而我們對文件內容進行操作。
1.創建含有內容的文件
 NSString * str = @”Hello World”;
 NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
 NSFileManager * manager = [NSFileManager defaultManager];
 [manager creatFileAtPath:@”./helloworld” contents:data attributes:nil];
 //如果第二個參數不是nil,就會在創建文件的同時,將data內容寫入文件
2.添加內容到已有的文件中
 NSFileHandle * handle = [NSFileHandle fileHandleForWritingAtPath:@”./helloworld”];  //只寫方式打開
 [handle writeData:data];  //寫入data數據
 想要寫入的數據,轉爲data,再寫到文件中去。
 handle = [NSFileHandle fileHandleForReading AtPath:@”./helloworld”];//只讀方式打開
 handle = [NSFileHandle fileHandleForUpdating AtPath:@”./helloworld”];//以讀寫的方式打開
 這面的三種方式,均能寫入文件內容,但是我們會發現,再次執行後,都會覆蓋上次寫入的內容。
3.追加內容到文件
 與C語言文件管理不同的是,OC中沒有追加的打開方式。OC中解決問題的方式,其實也很簡單,就是將文件指針移到文件尾,然後再執行寫入data操作,這樣就能完成追加。
 [handle seekToEndOfFile];//指針定位在文件尾,打開後執行這一步,再寫入數據,可完成追加。
4.讀取文件內容
 讀取文件內容有很多種方式,每種方式根據不同需要,可起到很好的效果。
(1)不打開文件,直接讀取文件內容
  NSData * data = [NSData dataWithContentsOfFile:@”./1.txt”];
  NSData對象data將保存一個普通的C字符串,我們使用data輸出時,使用%s,輸出就能看到我們讀出的內容。使用%@輸出的話,我們得到的是一串ASCII碼值。
  NSLog(@”%@”,(char * )[data bytes]);//強轉一下再打印。
(2)打開文件,再讀取
  NSFileHandle * handle = [NSFileHandle FileHandleForReadindAtPath:@”./1.txt”];
  NSData * data = [handle readDataOfToEndOfFile];//讀到文件尾,data接收內容
  NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];//將data內容轉入字符串
  我們也可以實現文件的分段讀取,避免文件過大,內存不夠的情況
  [handle readDataOfLength:6];//讀取六個字符的內容
  配合循環可以讀取文件的全部內容。
  [handle seekToFileOfSet:0];//指針定位在文件頭
(2)直接讀取文件內容到字符串
  NSString * str = [NSString stringWithContentOfFile:@”./1.txt” encoding:NSUTF8StringEncoding error:&error];//以文件內容生成一字符串,讀取全部內容
  [str writeToFile:@”./2.txt” atomically:no encoding:NSUTF8String Encoding error:&error];//將字符串內容寫入到文件中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章