溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

<OC的文件操作>

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

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI