生活随笔
收集整理的這篇文章主要介紹了
iOS之文件管理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
沙盒
-
iOS的沙盒機制:
1、iOS的應用程序只能對自己創建的文件系統讀取文件,這個獨立、封閉、安全的空間,叫做沙盒。它一般存放著程序包文件(可執行文件)、圖片、音頻、視頻、plist文件、sqlite數據庫以及其他文件;
2、每個應用程序都有自己的獨立的存儲空間(沙盒);
3、一般來說,應用程序之間是不可以互相訪問沙盒的;
4、模擬器的沙盒位置路徑:/User/userName/Library/Application Support/iPhone Simulator
-
沙盒的構成:當創建應用程序的時候,在每個沙盒中都含有三個文件,分別是Document、Library和temp。
1、Document:一般需要持久的數據都放在此目錄中,可以在當中添加子文件夾,iTunes備份和恢復的時候,會包括此目錄;
2、Library:設置程序的默認設置和其他的狀態;
3、temp:創建臨時文件的目錄,當iOS設備重啟時,文件會被自動清除。
-
獲取沙盒的目錄:
.h文件
#import <Foundation/Foundation.h>@interface YDWSandBoxPath : NSObject// 獲取沙盒Document文件目錄
+ (NSString *)getDocumentDirectory;// 獲取沙河Library文件目錄
+ (NSString *)getLibraryDirectory;// 獲取沙盒Library/Caches文件目錄
+ (NSString *)getCacheDirectory;// 獲取沙盒Preference文件目錄
+ (NSString *)getPreferencePanesDirectory;//獲取沙盒tmp文件目錄
+ (NSString *)getTmpDirectory;@end.m文件
#import "YDWSandBoxPath.h"@implementation YDWSandBoxPath+ (NSString *)getDocumentDirectory {return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}+ (NSString *)getLibraryDirectory {return [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
}+ (NSString *)getCacheDirectory {return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
}+ (NSString *)getPreferencePanesDirectory {return [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) lastObject];
}+ (NSString *)getTmpDirectory {return NSTemporaryDirectory();
}@end
- 清除緩存:在開發的過程中,遇到有用的數據,會進行緩存,當該數據不需要時,可以清除。在這里整理了幾個方法,統計文件的大小,清除指定文件,清除指定目錄下的全部文件等。
// 根據路徑返回目錄或文件的大小
+ (double)sizeWithFilePath:(NSString *)path {// 獲取文件的管理者NSFileManager *manager = [NSFileManager defaultManager];// 檢測路徑的合理性BOOL direct = NO;BOOL exits = [manager fileExistsAtPath:path isDirectory:&direct];if (!exits) {return 0;}if (direct) {NSArray *subPaths = [manager subpathsAtPath:path];int totalSize = 0;for (NSString *subPath in subPaths) {NSString *fullSubPath = [path stringByAppendingPathComponent:subPath];BOOL dir = NO;[manager fileExistsAtPath:path isDirectory:&dir];if (!dir) {NSDictionary *attrs = [manager attributesOfItemAtPath:fullSubPath error:nil];totalSize += [attrs[NSFileSize] integerValue];}}return totalSize/(1024*1024.0);} else {NSDictionary *attrs = [manager attributesOfItemAtPath:path error:nil];return [attrs[NSFileSize] intValue]/(1024*1024.0);}
}// 得到指定目錄下的所有文件
+ (NSArray *)getAllFileNames:(NSString *)dirPath {return [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dirPath error:nil];
}// 刪除指定目錄或文件
+ (BOOL)clearCacheWithFilePath:(NSString *)path {return [[NSFileManager defaultManager] removeItemAtPath:path error:nil];
}// 清空指定目錄下文件
+ (BOOL)clearCacheFormDirectoryPath:(NSString *)dirPath {NSArray *fileArray = [YDWSandBoxPath getAllFileNames:dirPath];BOOL flag = NO;for (NSString *fileName in fileArray) {NSString *filePath = [dirPath stringByAppendingPathComponent:fileName];flag = [YDWSandBoxPath clearCacheWithFilePath:filePath];if (!flag) {break;}}return flag;
}
NSData
- NSData存儲的是二進制數據,屏蔽了數據之間的差異,文本、音頻、圖像等數據都可用NSData來存儲;
- NSData的用法:
1、NSString與NSData互相轉換
NSData --> NSString為:NSString *dataString = [[NSString alloc] initWithData:[NSData data] encoding:NSUTF8StringEncoding];
NSString --> NSData為:NSData *stringData = [[NSString string] dataUsingEncoding:NSUTF8StringEncoding];
將data類型的數據,轉成UTF8的數據:
+ (NSString*)dataToUTF8String:(NSData *)data {return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
將string轉換為指定編碼 :
+ (NSString *)changeDataToEncodinString:(NSData *)data encodin:(NSStringEncoding )encoding {return [[NSString alloc] initWithData:data encoding:encoding];
}
2、NSData 與 UIImage
NSDat --> UIImage為:UIImage *image = [UIImage imageWithData: imageData];
例如:
- (NSData *)changePictureToNSData {NSString *filePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"ceshi.png"]];NSData *imageData = [NSData dataWithContentsOfFile:filePath];return imageData;
}
Plist文件:
數組、字典只能將BOOL、NSNumber、NSString、NSData、NSDate、NSArray、NSDictionary寫入屬性列表plist文件.
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"xxx.plist"];[[NSString string] writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"xxx.plist"];[[NSArray array] writeToFile:path atomically:YES];
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"xxx.plist"];[[NSDictionary dictionary] writeToFile:path atomically:YES];
總結
以上是生活随笔為你收集整理的iOS之文件管理的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。