OC语言基础十:OC文件操作
文章目錄
- 主要的類
- NSFileManager
- 創(chuàng)建文件管理類單例對象:
- 創(chuàng)建目錄
- 定義帶參宏
- 附帶中間路徑
- 創(chuàng)建文件
- 路徑遍歷
- 淺度遍歷
- 深度遍歷
- 文件移動
- 復(fù)制操作
- 刪除操作
- 查看屬性
- 查看文件是否在路徑下存在
- NSFileHandle
- 打開文件
- 讀取文件
- 寫入數(shù)據(jù)
- 文件數(shù)據(jù)的同步
- 光標移動
- 關(guān)閉文件
主要的類
NSFileManager:文件管理類,當我們要去創(chuàng)建目錄,或者操作目錄中某些文件的時候,或者想查看某個目錄或者文件的屬性。
NSFileHandle:如果操作對象是某個文件,并在里面進行文本的編輯。
NSFileManager
創(chuàng)建文件管理類單例對象:
NSFileManager *fileManger=[NSFileManager defaultManager];創(chuàng)建目錄
:第一個參數(shù):文件夾目錄
第二個參數(shù):是否附帶中間路徑,也就是在目錄之前可能生成一些中間目錄出來,YES附帶,NO不附帶,如果要在第一個參數(shù)目錄后面連續(xù)添加目錄,則必須為YES.比如:/Users/chao/Desktop/FileOperation/Test/Test1
第三個參數(shù):目錄屬性,一般用系統(tǒng)默認提供給我們的,一般傳nil
第四個參數(shù):如果目錄創(chuàng)建失敗,返回為什么創(chuàng)建失敗了,以便于我們?nèi)ネ瓿梢恍┊惓2僮鳌J且粋€二級指針。
返回是一個BOOL值,也能幫助我們判斷路徑是創(chuàng)建成功了還是失敗了。
將文件夾拖動到xcode界面,會在文檔里自動生成該文件夾的路徑。
NSError *error=nil; BOOL ret=[fileManager createDirectoryAtPath:@"/Users/chao/Desktop/FileOperation/Test" withIntermediateDirectories:NO attributes:nil error:&error]; if(ret){NSLog(@"目錄創(chuàng)建成功"); }else{NSLog(@"目錄創(chuàng)建失敗,reason:%@",error); }定義帶參宏
為了后續(xù)操作路徑方便,對多次使用的同一個路徑,可以寫在一個宏定義當中。首先確定變量是什么,不變的量是什么。父路徑是不變的,可變的是子路徑,到底是創(chuàng)建目錄呢,還是創(chuàng)建文件。
使用的時候,用到字符串拼接,或者格式化字符串的方法。
#import <Foundation/Foundation.h>#define kPathAtFileOperation(subpath) \[NSString stringWithFormat:@"/Users/chao/Desktop/FileOperation/%@",subpatch]//main NSError *error=nil; BOOL ret=[fileManager createDirectoryAtPath:kPathAtFileOperation(@"test") withIntermediateDirectories:NO attributes:nil error:&error]; if(ret){NSLog(@"目錄創(chuàng)建成功"); }else{NSLog(@"目錄創(chuàng)建失敗,reason:%@",error); }附帶中間路徑
test1和test1-1之前都沒有生成過,此時第二個參數(shù)要寫成YES,如果寫成NO的話,程序不會識別中間的test1。
BOOL ret=[fileManager createDirectoryAtPath:kPathAtFileOperation(@"test1/test1-1") withIntermediateDirectories:YES attributes:nil error:&error];創(chuàng)建文件
文件路徑肯定是帶 .文件類型 的。
contents參數(shù)接的是文件的內(nèi)容,NSData類型,如果傳nil,那么文件內(nèi)容就是空的。
當多次創(chuàng)建相同的文件時,會進行覆蓋操作。
NSString *string=@"文件操作"; NSData *data=[string dataUsingEncoding:NSUTF8StringEncoding]; ret=[fileManager createFileAtPath:kPathAtFileOperation(@"test.txt") contents:data attributes:nil];路徑遍歷
淺度遍歷
第一個參數(shù):要遍歷的路徑。返回結(jié)果是NSArray類型的,會把目錄下的所有內(nèi)容全部列舉出來。隱藏文件一般都是.開頭的
NSArray *contents=[fileManager contentsOfDirectoryAtPath:@"/Users/chao/Desktop/FileOperation" error:nil];結(jié)果:
“.DS_Store”,
test,
“test.txt”,
test1
深度遍歷
contents=[fileManager subpathsOfDirectoryAtPath:@"/Users/chao/Desktop/FileOperation" error:nil];結(jié)果:
“.DS_Store”,
test,
“test.txt”,
test1,
“test1/.DS_Store”,
“test1/test1-1”
淺度遍歷的結(jié)果,在深度遍歷里都可以找到。文件結(jié)構(gòu)中所有的節(jié)點都會掃描一遍。所以淺度效率要高一些,深度遍歷在路徑復(fù)雜的時候,耗時會久一些。
文件移動
[fileManager moveItemAtPath:kPathAtFileOperation(@"test.txt") toPath:kPathAtFileOperation(@"test/test.txt") error:nil];復(fù)制操作
[fileManager copyItemAtPath:kPathAtFileOperation(@"test/test.txt") toPath:@"/Users/chao/Desktop/FileOperation" error:nil];刪除操作
[fileManager removeItemAtPath:kPathAtFileOperation(@"test.txt") error:nil];查看屬性
返回結(jié)果是字典NSDictionary類
NSDictionary *dictionary=[fileManager attributesOfItemAtPath:kPathAtFileOperation(@"test/test.txt") error:nil];查看文件是否在路徑下存在
if(fileManager fileExistsAtPath:kPathAtFileOperation(@"test/test.txt")){NSLog(@"YES"); }else{NSLog(@"NO"); }NSFileHandle
打開文件
只讀,不可寫:
NSFileHandle * = [NSFileHandle fileHandleForReadingAtPath:"/Users/chao/Desktop/FileOperation/test/test.txt"]; NSLog(@"%@",[fileHandle readDataToEndOffFile]);//從光標的位置讀到文件末尾,如果不去操作光標位置,那么光標默認是在文件的最前面。讀出的是二進制數(shù)據(jù),要轉(zhuǎn)換一下才能看到有意義的字符串只寫,不可讀:
NSFileHandle * = [NSFileHandle fileHandleForWritingAtPath:"/Users/chao/Desktop/FileOperation/test/test.txt"];可讀,可寫:
NSFileHandle * = [NSFileHandle fileHandleForUpdatingAtPath:"/Users/chao/Desktop/FileOperation/test/test.txt"];讀取文件
NSLog(@"%@",[fileHandle readDataToEndOffFile]); NSLog(@"%@",[fileHandle readDataToEndOffFile]);第二次輸出為空,因為每次去調(diào)取讀取文件相關(guān)方法的時候,都會導(dǎo)致光標的移動。
讀取指定長度的數(shù)據(jù):
[fileHandle readDataOfLength:1];寫入數(shù)據(jù)
寫入的是NSData數(shù)據(jù)。
string的dataUsingEncoding方法,字符串轉(zhuǎn)NSData
文件數(shù)據(jù)的同步
在進行了文件數(shù)據(jù)的修改后,可以手動調(diào)用synchronizeFile方法,來完成數(shù)據(jù)的同步,這是很常用的。
[fileHandle synchronizeFile];光標移動
offset是光標的偏移量,當offset為0,光標就會設(shè)置到文件開頭。
[fileHandle seekToFileOffset:0];關(guān)閉文件
每次打開文件,操作完成后,必須關(guān)閉文件。關(guān)閉之后就不能繼續(xù)進行操作了。
[NSFileHandle closeFile];總結(jié)
以上是生活随笔為你收集整理的OC语言基础十:OC文件操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tar 打包 . 开头的隐藏文件
- 下一篇: 采用状态空间法求解八数码问题