<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];//將字符串內容寫入到文件中