ios學習:文件簡單讀寫


2013.10.05補充  參考自 http://www.cnblogs.com/chinapcc/archive/2013/04/03/2673092.html

要把自定義類保存到plist文件里,要注意一下三點:

1、自定義類要繼承NSCoding協議,實現 -(void)encodeWithCoder:(NSCoder *)coder 方法和  - (id) initWithCoder: (NSCoder *)coder方法

2、在寫入plist文件時要對數據序列化然后寫入:[NSKeyedArchiver archiveRootObject:array toFile:filename];array是要寫入的數據,filename是plist文件路徑

3、在讀取plist文件數據時要對數據反序列化才能用:NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile: filename];

建議在有條件的情況下還是把數據放到 NSMutableArray / NSArray / NSMutableDictionary / NSDictionary 里,寫入plist文件吧

 

ios項目的文件分工程項目里的文件和程序沙盒里的文件兩種,其中項目工程里的文件是只讀的,為沙盒里的文件可讀可寫.對於讀文件而言,不管是工程里的還是沙盒的,方法都一樣,唯一不同的在於文件路徑的獲取.

1 文件目錄

 

2 txt文件.每一行數據的字段之間是用 \t 來分割

 

3  TWFXCityCode類:

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface TWFXCityCode : NSObject
 4 {
 5    @public
 6     NSString *cityName;
 7     NSString *cityCode;
 8     NSString *pinyin;
 9     NSString *sortPinyin;
10     NSString *provinceName;
11     NSString *provinceCode;    
12 }
13 
14 @end

 

4 TWFXViewController類的頭文件

 1 #import <UIKit/UIKit.h>
 2 #import "TWFXCityCode.h"
 3 
 4 @interface TWFXViewController : UIViewController
 5 
 6 @property (retain, nonatomic) NSMutableArray *weatherData;
 7 
 8 - (IBAction)btnClick_readFile:(UIButton *)sender;
 9 - (IBAction)btnClick_writePlist:(UIButton *)sender;
10 - (IBAction)btnClick_readPlist:(UIButton *)sender;
11 - (IBAction)btnClick_test:(UIButton *)sender;
12 @end

 

5 項目工程里txt文件的讀取:

 1 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test123" ofType:@"txt"];
 2 
 3    NSArray *fileData;
 4     NSError *error;
 5 
 6     //讀取file文件並把內容根據換行符分割后賦值給NSArray
 7     fileData = [[NSString stringWithContentsOfFile:filePath
 8                                           encoding:NSUTF8StringEncoding
 9                                              error:&error]
10                 componentsSeparatedByString:@"\n"];
11     
12     
13     //獲取NSArray類型對象的迭代器
14     NSEnumerator *arrayEnumerator = [fileData objectEnumerator];
15     NSString *tempStr;
16     
17     while (tempStr = [arrayEnumerator nextObject]) {
18         
19         TWFXCityCode *cityCode = [[TWFXCityCode alloc] init];
20         
21         //把每行字符串再按 \t 符分割
22         NSArray *cityInfo = [tempStr componentsSeparatedByString:@"\t"];
23         
24         cityCode->cityCode = cityInfo[0];
25         cityCode->cityName = cityInfo[1];
26         cityCode->pinyin   = cityInfo[2];
27         cityCode->sortPinyin = cityInfo[3];
28         cityCode->provinceCode = cityInfo[4];
29         cityCode->provinceName = cityInfo[5];
30         
31         [self.weatherData addObject:cityCode];
32         [cityCode release];
33     }

 

6 把數據保存到沙盒里的plist文件

 1  //獲取應用程序沙盒的Documents目錄
 2     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 3     
 4     NSString *plistPath1 = [paths objectAtIndex:0];
 5     
 6     //得到完整路徑名
 7     NSString *filename = [plistPath1 stringByAppendingPathComponent:@"weathertest.plist"];
 8     
 9     //保存對字符串解析后的數據.dictionary里的value不能是自定類型對象么?還是說自定義類要實現指定的協議?
10     //沒辦法,暫時先用一個dictionary來保存value吧
11     NSMutableDictionary *myDic = [[NSMutableDictionary alloc] init];
12         
13     for (TWFXCityCode *city in self.weatherData) {
14             
15         NSMutableDictionary *tempDic = [[NSMutableDictionary alloc] init];
16         [tempDic setValue:city->cityCode forKey:@"cityID"];
17         [tempDic setValue:city->cityName forKey:@"cityName"];
18         [tempDic setValue:city->pinyin forKey:@"cityPinyin"];
19         [tempDic setValue:city->sortPinyin forKey:@"citySortPinyin"];
20         [tempDic setValue:city->provinceCode forKey:@"provinceID"];
21         [tempDic setValue:city->provinceName forKey:@"provinceName"];
22         
23         [myDic setValue:tempDic forKey:city->cityCode];
24     }
25     
26     NSLog(@"寫plist文件完成");
27     [myDic writeToFile:filename atomically:YES];
28     

 

7 沙盒里plist文件的內容

 


免責聲明!

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



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