OC文件操作2


1、對文件本身的操作 NSManager

2、對文件內容的操作 NSHandle 文件句柄

1 NSFileHandle * fh = [NSFileHandle fileHandleForReadingAtPath:@""]; //以只讀方式打開文件生成文件句柄 

內存:內部存儲器;硬盤:外部存儲設備。 從硬盤到內存(從文件到內存)叫做讀,從內存到文件(硬盤)叫做寫。

1 //讀取文件內容的兩種方式 
2 NSData * data = [fh readDataOfLength:3]; 
3 //繼續上面3個字節后,繼續讀取5個字節 
4 data = [fh readDataOfLength:5];

如果文件內容不是特別的多,可以用下面的方法直接讀取全部內容

1 //如果文件內容不是特別的多,可以用下面的方法直接讀取全部內容 
2 data = [fh readDataToEndOfFile];
3 NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

除了上面讀的方法,還有寫的方法。

1 NSFileHandle * fh = [NSFileHandle fileHandleForWritingAtPath:@""]; //以只寫方式打開文件生成句柄
2 [fh writeData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]];//直接覆蓋掉前面相應數量的字符

類似C語言一樣,直接將文件清空,然后將內容寫入到文件里面。首先需要將文件字節截短至0

1 [fh truncateFileAtOffset:0]; 
2 //將文件內容截斷至0字節 
3 [fh writeData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]];

修改文件,將新的內容添加至已有內容的末尾。

1 [fh seekToEndOfFile]; //將讀寫指針設在文件的尾端
2 [fh writeData:[@"XXX" dataUsingEncoding:NSUTF8StringEncoding]];

3、歸檔

歸檔:把平時使用的變量或者對象以一定的格式寫入文件中進行存儲,等到需要的時候直接讀取出來就能還原成原對象的格式。

 1 #define PATH @"/Users/liyang/Desktop/Test/file.plist"
 2 
 3 NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",nil]; 
 4 [dict writeToFile:PATH atomically:YES];
 5 
 6 NSDictionary * dict = [[NSDictionary alloc] initWithContentsOfFile:PATH];
 7 [NSLog @"%@",dict];
 8 
 9 NSArray * array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",nil]; 
10 [array writeToFile:PATH atomically:YES];

如果處理的數據較大的時候,需要一個輔助的類似NSKededArchieve。

1 NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",nil]; 
2 NSArray * array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",nil]; 
3 NSMutableData * data = [[NSMutableData alloc] init]; 
4 NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc] initForWritingWithMudatableData:data]; 
5 [archiver encodeObject:array forKey:@"array"]; 
6 [archiver encodeObject:dict forKey:@"dict"];
7 [archiver finishEncoding]; 
8 [data writeToFile:PATH atomically:YES];

歸檔后的內容看上去都是亂碼,可以用反歸檔對象NSKeyedUnarchiver獲取plist文件里面的內容

1 //獲取plist的內容
2 NSData * data = [[NSData alloc] initWithContentsOfFile:PATH];
3 NSKeyedUnarchiver * unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
4 NSArray * array = [unarchiver decodeObjectForKey:@"array"]; 
5 NSLog(@"%@",array);


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM