@interface SandBoxPaths : NSObject
// 主路徑
+ (NSString *) homePath;
// document 路徑
+ (NSString *) documentPath;
// library 路徑
+ (NSString *) libraryPath;
// caches 路徑
+ (NSString *) cachesPath;
// tmp 路徑
+ (NSString *) tmpPath;
// 從 bundle 下獲取資源文件
+ (id) sourceFromBundleWithName:(NSString *)name type:(NSString *)type;
// 讀取文件
+(id)readDataWithPath:(NSString *)path dataType:(NSString *)dataType;
// 寫入文件
+(void) dataWriteToFileWithName:(NSString *)name type:(NSString *)type data:(id)data;
@end
@implementation SandBoxPaths
// 得到沙盒主路徑
+ (NSString *) homePath{
return NSHomeDirectory();
}
// 得到 documents 路徑
+ (NSString *) documentPath{
return NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
}
// 得到 library 路徑
+ (NSString *) libraryPath{
return NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)[0];
}
// 得到 caches 路徑
+ (NSString *) cachesPath{
return NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
}
// 得到 tmp 路徑
+ (NSString *) tmpPath{
return? NSTemporaryDirectory();
}
// 獲取 bundle 下的資源文件
+ (id)sourceFromBundleWithName:(NSString *)name type:(NSString *)type{
return [[NSBundle mainBundle]pathForResource:name ofType:type];
}
// 寫入文件
+(void) dataWriteToFileWithName:(NSString *)name type:(NSString *)type data:(id)data{
if ([data isKindOfClass:[NSString class]]) {
// 說明要寫入的數(shù)據(jù)類型為字符串類型
// 1碘赖、先創(chuàng)建要寫入的文件路徑? stringByAppendingPathComponent:專門用來拼接文件路徑隐锭,在拼接的時(shí)候,不用添加“/”
NSString *docuPath = [[SandBoxPaths documentPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@",name,type]];
// 2移层、將數(shù)據(jù)寫入到創(chuàng)建好的路徑下
// file:要保存數(shù)據(jù)的文件路徑
// atomically:原子性筷笨。 YES:保持文件的原子性憔鬼,在文件的寫入過程中,系統(tǒng)會(huì)創(chuàng)建一個(gè)臨時(shí)文件胃夏,當(dāng)文件整個(gè)寫入完成之后轴或,會(huì)將臨時(shí)文件的數(shù)據(jù)轉(zhuǎn)移到咋們要存儲(chǔ)數(shù)據(jù)的路徑下。NO,直接將數(shù)據(jù)寫入到存儲(chǔ)的路徑下
// encoding 編碼格式不匹配
// error 錯(cuò)誤信息
BOOL isWriteSuccess = [data writeToFile:docuPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
if (isWriteSuccess) {
NSLog(@"%@文件寫入成功",name);
}else{
NSLog(@"%@文件寫入失敗",name);
}
// 寫入的文件類型非字符串類型? 如果要寫入的數(shù)據(jù)為數(shù)組或者字典仰禀,那么數(shù)組或者字典的元素類型也必須是簡單數(shù)據(jù)類型
}else{
NSString *pathString = [[SandBoxPaths documentPath]stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@",name,type]];
//? ? ? ? BOOL isWriteSuccess = [data writeToFile:pathString options:NSDataWritingAtomic error:nil];
BOOL isWriteSuccess =? [data writeToFile:pathString atomically:YES];
if (isWriteSuccess) {
NSLog(@"%@文件寫入成功",name);
}else{
NSLog(@"%@寫入失敗",name);
}
}
}
// 從文件路徑下讀取數(shù)據(jù)<封裝>
+(id)readDataWithPath:(NSString *)path dataType:(NSString *)dataType{
// 從路徑下讀取數(shù)據(jù)
if ([dataType isEqualToString:@"NSString"]) {
// NSClassFromeString 將字符串類型轉(zhuǎn)化為 類名
// NSStringFromClass 將類名轉(zhuǎn)化為字符串
// 字符串類型的讀取
return [[NSClassFromString(dataType)alloc]initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
}else{
// 非字符串類型的讀取
return [[NSClassFromString(dataType)alloc]initWithContentsOfFile:path];
}
}
@end