這是我個人的學習筆記 , 如有不同見解歡迎評論交流 .
( 我的微博 : http://weibo.com/JohnnyB0Y )
-
沙盒機制
1.每個應用都有自己的沙盒,不能越界讀寫其他應用的數據。
2.獲取Documents文件夾路徑
NSArray *pathsList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *documentPath = [pathsList lastObject];
3.獲取Library文件夾路徑
NSArray *pathsList = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
NSUserDomainMask,
YES);
NSString *libraryPath = [pathsList lastObject];
4.獲取tmp文件夾路徑
NSString *tmpPath = NSTemporaryDirectory();
沙盒文件夾 | 使用場景 |
---|---|
Documents | iTunes會同步,存放重要的數據,希望同步到其他設備的數據。 |
Library | iTunes不會同步,設置程序的默認設置和其他狀態信息。 |
Library/Caches | 緩存文件夾,保存可以從網絡上重復獲取的資源(節省流量)。 |
Library/Preferences | 保存一些用戶信息配置文件,LaunchScreen生成的啟動圖片。 |
tmp | 創建臨時文件的目錄,當iOS設備重啟時,文件會被自動清除。 |
-
NSFileManager
1.創建一個文件并寫入數據
- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;
2.從一個文件中讀取數據
- (NSData *)contentsAtPath:(NSString *)path;
3.scrPath路徑上的文件移動到dstPath路徑上,注意這里的路徑是文件路徑而不是目錄
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **) error;
4.scrPath路徑上的文件復制到dstPath路徑上
- (BOOL)copyItemAtPath:(NSString *)scrPath toPath:(NSString *)dstPath error:(NSError **) error;
5.比較兩個文件的內容是否一樣
- (BOOL)contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2;
6.文件是否存在
- (BOOL)fileExistsAtPath:(NSString *)path;
7.移除文件
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **) error;
8.創建文件管理
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *path = [NSHomeDirectory( ) stringByAppendingPathComponent:@"holyBible.txt"];
NSString *text = @"abcdefg";
9.將字符串轉成NSData類型
NSData *data = [text dataUsingEncoding: NSUTF8StringEncoding];
10.寫入文件
BOOL success = [fileManager createFileAtPath:path contents:data attributes:nil];
11.創建文件夾
NSString *filePath = [path stringByAppendingPathComponent:@"holyBible.txt"];
NSString *contect = @"abcdefg”;
BOOL success = [fm createFileAtPath:filePath contents:[content dataUsingEncoding: NSUTF8StringEncoding] attributes:nil];
12.NSFileManager-讀取內容
NSData *fileData = [fileManager contentsAtPath:filePath];
NSString *content = [[NSString alloc] initWithData:fileData dataUsingEncoding: NSUTF8StringEncoding];
13.NSData-讀取內容
NSString *filePath = [path stringByAppendingPathComponent:@"holyBible.txt"];
NSData *data = [NSData dataWithContentOfFile:filePath];
13.1 NSString-讀取內容
NSString *filePath = [path stringByAppendingPathComponent:@"holyBible.txt"];
NSString *content = [[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
移動、復制文件
14.移動文件(重命名)
NSString *toPath = [NSHomeDirectory( ) stringByAppendingPathComponent:@"hellogod/New Testament.txt"];
[fm createDirectoryAtPath:[toPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil];
NSError *error;
BOOL isSuccess = [fm moveItemAtPath:filePath toPath:toPath error:&error];
15.復制文件(重命名)
NSString *copyPath = [NSHomeDirectory( ) stringByAppendingPathComponent:@"備份/Old Testament.txt"];
[fm createDirectoryAtPath:[toPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil];
BOOL success = [fm copyItemAtPath:toPath toPath:toPath error:nil];
刪除文件、獲取文件大小
16.判斷文件是否存在和刪除文件
if([fm fileExistsAtPath])
{
if ([fm removeItemAtPath:copyPath])
{
NSLog(@"remove success");
}
}
17.獲得文件的屬性字典
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *attrDic = [fileManager attributesOfItemAtpath:sourcePath error:nil];
18.獲取文件大小
NSNumber *fileSize = [attrDic objectForKey:NSFileSize];
19.獲取目錄文件信息
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *enuPath = [NSHomeDirectoty( ) stringByAppendingPathComponent:@"Test"];
NSDictionaryEnumerator *dirEnum = [fileManager enumeratorAtPath:enuPath];
NSString *path = nil;
while ((path = [dirEnum nextObject]} != nil){
NSLog(@"%@",path);
}
-
Plist、Archive數據歸檔
#######Plist就是數組、字典(xml的組織形式)直接寫到沙盒中。
字典:[dictionary writeToFile:寫入文件的路徑 atomically:是否原子寫入];
數組:[array writeToFile:寫入文件的路徑 atomically:是否原子寫入];
#######Archive歸檔解檔。
1.要歸檔的類需要實現<NSCoding>協議
1.1 解檔屬性:重寫
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
self.requestData = [aDecoder decodeObjectForKey:@"requestData"];
}
return self;
}
1.2 歸檔屬性:重寫
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_requestData forKey:@"requestData"];
}
2.對類完整歸檔解檔
NSString *objKey = @"objKey";
NSString *savePath = [NSString stringWithFormat:@"%@/save.data", NSTemporaryDirectory()];
// 1 歸檔
NSMutableData *dataM = [NSMutableData data];
NSKeyedArchiver *keyedArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:dataM];
[keyedArchiver encodeObject:@"對象" forKey:objKey];
[keyedArchiver finishEncoding];
// 歸檔后把dataM保存到沙盒
[dataM writeToFile:savePath atomically:YES];
// 2 解檔
// 從沙盒讀取data
NSData *data = [[NSData alloc] initWithContentsOfFile:savePath];
// 開始解檔
NSKeyedUnarchiver *keyedUnarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSString *string = [keyedUnarchiver decodeObjectForKey:objKey];
[keyedUnarchiver finishDecoding];
-
NSUserDefaults
1.屬于簡化版的Archive歸解檔
NSString *objKey = @"objKey";
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// 保存數據(其中有很多類型的數據)
[userDefaults setObject:@"對象" forKey:objKey];
// 讀取數據
[userDefaults objectForKey:objKey];
-
SQLite3應用