直接上代碼:
.h文件:
[cpp] #import <Foundation/Foundation.h>
#define DEFAULT_DATE_TIME_FORMAT (@"yyyy-MM-dd'T'HH:mm:ss'Z'")
#define DEFAULT_DATE_FORMAT (@"yyyy-MM-dd")
#define DEFAULT_TIME_FORMAT (@"HH:mm:ss'Z'")
@interface FileUtils : NSObject {
}
+(NSString*) settingPath;
+(NSString*) cachePath;
+(BOOL) clearCache:(NSError**)error;
+(NSString*) fileAtBundleResource:(NSString*)file;
+(BOOL) fileExist:(NSString*)file;
+(BOOL) fileExistAtCache:(NSString*)file;
+(NSString*) cachedFile:(NSString*)file;
+(BOOL) writeToFile:(NSString*)fileWithPath withData:(NSData*)data;
+(BOOL)deleteFile:(NSString*)fileWithPath;
+(NSString*) documentPathWith:(NSString*)cmp;
@end
@interface ValueUtils : NSObject {
}
+(BOOL) isEmpty:(NSString*)text;
+(BOOL) boolValue:(NSDictionary*)dict forKey:(id)key;
+(float) floatValue:(NSDictionary*)dict forKey:(id)key;
+(NSInteger) intValue:(NSDictionary*)dict forKey:(id)key;
+(NSString*) stringValue:(NSDictionary*)dict forKey:(id)key;
+(NSArray*) arrayValue:(NSDictionary*)dict forKey:(id)key;
+(id) noneNullValue:(NSDictionary*)dict forKey:(id)key;
+(NSDictionary*) dictionaryValue:(NSDictionary*)dict forKey:(id)key;
+(BOOL) stringEquals:(NSString*)str1 to:(NSString*)str2;
+(BOOL) caseEquals:(NSString*)str1 to:(NSString*)str2;
+(NSString*) refineUrl:(NSString*)url;
+(BOOL) isURLString:(NSString*)text;
+(BOOL) startWith:(NSString*)prefix forString:(NSString*)text;
+(BOOL) endWith:(NSString*)suffix forString:(NSString*)text;
+(NSDate *)stringToDate:(NSString *)string withFormat:(NSString*)fmt;
+(NSString*) dateToString:(NSDate*)date withFormat:(NSString*)fmt;
+(NSString*) idToString:(id)obj;
+(BOOL) booleanToBool:(id)bobj;
@end
.m文件:
[cpp] view plaincopy
#import "FileUtils.h"
#import "CJSONDeserializer.h"
#import "CJSONSerializer.h"
@implementation FileUtils
+(NSString*) settingPath
{
////Make a new director
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
documentsDirectory = [documentsDirectory stringByAppendingPathComponent:@".settings"];
BOOL folder = NO;
BOOL exist = [fileManager fileExistsAtPath:documentsDirectory isDirectory:&folder];
if ( exist == YES && folder == YES ) {
return [documentsDirectory stringByAppendingPathComponent:@"measets.ini"];
}else{
NSError* error = nil;
[fileManager createDirectoryAtPath:documentsDirectory
withIntermediateDirectories:YES
attributes:nil
error:&error];
if( error != nil ){
NSLog(@"Can not create directory %@. Error is %@.", documentsDirectory,
[error description]);
return nil;
}
return documentsDirectory;
}
/***
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectoryPath = [paths objectAtIndex:0];
NSString *secondaryDirectoryPath = [documentsDirectoryPath stringByAppendingPathComponent:@"secondary"];
NSString *databaseFile = [secondaryDirectoryPath stringByAppendingPathComponent:@"database.db"];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager removeItemAtPath:databaseFile error:NULL];
***/
}
+(BOOL) fileExist:(NSString*)file
{
NSFileManager *fileManager = [NSFileManager defaultManager];
return [fileManager fileExistsAtPath:file];
}
+(NSString*) fileAtBundleResource:(NSString*)file
{
return [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:file];
}
+(BOOL) fileExistAtCache:(NSString*)file
{
return [self fileExist:[self cachedFile:file]];
}
+(NSString*) cachedFile:(NSString*)file
{
NSString* fileAtCache = [NSString stringWithFormat:@"%@%@",[self cachePath], file];
return fileAtCache;
}
+(BOOL) writeToFile:(NSString*)fileWithPath withData:(NSData*)data
{
BOOL folder = NO;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString* fileName = [fileWithPath lastPathComponent];
NSInteger toIndex = [fileWithPath length] - [fileName length];
NSString* path = [fileWithPath substringToIndex:toIndex];
BOOL exist = [fileManager fileExistsAtPath:path isDirectory:&folder];
if ( exist != YES ) {
NSError* error = nil;
[fileManager createDirectoryAtPath:path
withIntermediateDirectories:YES
attributes:nil
error:&error];
if( error != nil ){
NSLog(@"Can not create directory %@. Error is %@.", path,
[error description]);
return NO;
}
}
if ( data != nil ) {
return [data writeToFile:fileWithPath atomically:YES];
}
return NO;
}
+(NSString*) documentPathWith:(NSString*)cmp
{
////Make a new director
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
documentsDirectory = [documentsDirectory stringByAppendingPathComponent:cmp];
BOOL folder = NO;
BOOL exist = [fileManager fileExistsAtPath:documentsDirectory isDirectory:&folder];
if ( exist == YES && folder == YES ) {
return documentsDirectory;
}else{
NSError* error = nil;
[fileManager createDirectoryAtPath:documentsDirectory
withIntermediateDirectories:YES
attributes:nil
error:&error];
if( error != nil ){
NSLog(@"Can not create directory %@. Error is %@.", documentsDirectory,
[error description]);
return nil;
}
return documentsDirectory;
}
}
+(NSString*) cachePath
{
////Make a new director
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
documentsDirectory = [documentsDirectory stringByAppendingPathComponent:@".caches"];
BOOL folder = NO;
BOOL exist = [fileManager fileExistsAtPath:documentsDirectory isDirectory:&folder];
if ( exist == YES && folder == YES ) {
return documentsDirectory;
}else{
NSError* error = nil;
[fileManager createDirectoryAtPath:documentsDirectory
withIntermediateDirectories:YES
attributes:nil
error:&error];
if( error != nil ){
NSLog(@"Can not create directory %@. Error is %@.", documentsDirectory,
[error description]);
return nil;
}
return [documentsDirectory stringByAppendingPathComponent:@"measets.ini"];
}
}
+(BOOL)deleteFile:(NSString*)fileWithPath
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError* error = nil;
BOOL ret = [fileManager removeItemAtPath:fileWithPath error:&error];
if ( error != nil ) {
NSLog(@"DeleteFile with an error: %@.", [error description]);
}
return ret;
}
+(BOOL) clearCache:(NSError**)error
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
documentsDirectory = [documentsDirectory stringByAppendingPathComponent:@".caches"];
[fileManager removeItemAtPath:documentsDirectory error:error];
return YES;
}
@end
@implementation ValueUtils
+(BOOL) isEmpty:(NSString*)text
{
if (text == nil) {
return YES;
}
if ([text length] == 0 ) {
return YES;
}
return NO;
}
+(NSString*) idToString:(id)obj
{
if ( obj == nil ) {
return nil;
}
if ( [obj isKindOfClass:[NSNull class]]) {
return nil;
}
if ( [obj isKindOfClass:[NSString class]]) {
return (NSString*)obj;
}else if ( [obj isKindOfClass:[NSArray class]] ){
NSMutableString* ntf = [NSMutableString string];
for (id t in obj ) {
[ntf appendString:[self idToString:t]];
[ntf appendString:@","];
}
return ntf;
}else {
if( CFGetTypeID(obj) == CFBooleanGetTypeID() ){
return [NSString stringWithFormat:@"%@", (CFBooleanGetValue((CFBooleanRef)obj) == true ? @"true" : @"false") ];
}
if ( sizeof(obj) == sizeof(BOOL) ) {
//return (BOOL)obj == YES ? @"true" : @"false";
}
if( [obj respondsToSelector:@selector(stringValue)] ){
return [obj stringValue];
}
return [obj description];
}
}
+(BOOL) boolValue:(NSDictionary*)dict forKey:(id)key
{
id bl = [dict objectForKey:key];
if ( bl == nil || [bl isKindOfClass:[NSNull class]]) {
return NO;
}
if ( [bl isKindOfClass:[NSString class]]) {
NSString* cstr = [bl lowercaseString];
if ( [cstr isEqualToString:@"yes"] || [cstr isEqualToString:@"true"]) {
return YES;
}
return [cstr boolValue];
}
if ( CFBooleanGetValue((CFBooleanRef)bl) ) {
return YES;
}
return NO;
}
+(float) floatValue:(NSDictionary*)dict forKey:(id)key{
id bl = [dict objectForKey:key];
if ( bl == nil || [bl isKindOfClass:[NSNull class]]) {
return 0.0f;
}
return [bl floatValue];
}
+(NSInteger) intValue:(NSDictionary*)dict forKey:(id)key
{
id bl = [dict objectForKey:key];
if ( bl == nil || [bl isKindOfClass:[NSNull class]]) {
return 0.0f;
}
return [bl floatValue];
}
+(NSString*) stringValue:(NSDictionary*)dict forKey:(id)key
{
id bl = [dict objectForKey:key];
if ( bl == nil || [bl isKindOfClass:[NSNull class]]) {
return nil;
}
return [self idToString:bl];
}
+(NSArray*) arrayValue:(NSDictionary*)dict forKey:(id)key
{
id bl = [dict objectForKey:key];
if ( bl == nil || [bl isKindOfClass:[NSNull class]]) {
return nil;
}
if ( [bl isKindOfClass:[NSArray class]]) {
return (NSArray*)bl;
}
return nil;
}
+(NSDictionary*) dictionaryValue:(NSDictionary*)dict forKey:(id)key
{
id bl = [dict objectForKey:key];
if ( bl == nil || [bl isKindOfClass:[NSNull class]]) {
return nil;
}
return (NSDictionary*)bl;
}
+(id) noneNullValue:(NSDictionary*)dict forKey:(id)key
{
id bl = [dict objectForKey:key];
if ( bl == nil || [bl isKindOfClass:[NSNull class]]) {
return nil;
}
return bl;
}
+(BOOL) stringEquals:(NSString*)str1 to:(NSString*)str2
{
if ( str1 == nil || str2 == nil ) {
return NO;
}
return [str1 compare:str2 options:NSCaseInsensitiveSearch] == NSOrderedSame;
}
+(BOOL) caseEquals:(NSString*)str1 to:(NSString*)str2
{
return (str1 == nil || str2 == nil) ? NO : [str1 isEqualToString:str2];
}
+(BOOL) startWith:(NSString*)prefix forString:(NSString*)text;
{
if ( text != nil && prefix != nil ){
if ( [prefix length] > [text length] ) {
return NO;
}
NSString* prestr = [text substringToIndex:[prefix length]];
if ( [self stringEquals:prestr to:prefix] ) {
return YES;
}
}
return NO;
}
+(BOOL) endWith:(NSString*)suffix forString:(NSString*)text
{
if ( text != nil && suffix != nil ){
if ( [suffix length] > [text length] ) {
return NO;
}
NSInteger len = [text length] - [suffix length];
NSString* sufstr = [text substringFromIndex:len];
if ( [self caseEquals:sufstr to:suffix] ) {
return YES;
}
}
return NO;
}
+(BOOL) isURLString:(NSString*)text
{
if ( [text length] > 6 ) {
NSString* prefix = [text substringToIndex:6];
if ( [self stringEquals:prefix to:@"http:/"] || [self stringEquals:prefix to:@"https:"] ) {
return YES;
} else if ( [self stringEquals:prefix to:@"local:" ] ){
return YES;
}
}
if ( [self startWith:@"/" forString:text] ){
return YES;
}
return NO;
}
+(NSString*) refineUrl:(NSString*)url
{
return url;
}
+(BOOL) booleanToBool:(id)bobj
{
if ( bobj == nil ) {
return NO;
}
if ( [bobj isKindOfClass:[NSString class]] ) {
return [bobj caseInsensitiveCompare:@"yes"] == 0 || [bobj caseInsensitiveCompare:@"true"] == 0;
}else if ( [bobj respondsToSelector:@selector(boolValue)] ){
return [bobj boolValue];
}else {
return CFBooleanGetValue((CFBooleanRef)bobj);
}
return NO;
}
+(NSDate *)stringToDate:(NSString *)string withFormat:(NSString*)fmt{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone defaultTimeZone]];
//#define kDEFAULT_DATE_TIME_FORMAT (@"yyyy-MM-dd'T'HH:mm:ss'Z'")
NSString* format = fmt == nil ? DEFAULT_DATE_TIME_FORMAT : fmt;
[formatter setDateFormat:format];
NSDate *date = [formatter dateFromString:string];
[formatter release];
return date;
}
+(NSString*) dateToString:(NSDate*)date withFormat:(NSString*)fmt
{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone defaultTimeZone]];
//#define kDEFAULT_DATE_TIME_FORMAT (@"yyyy-MM-dd'T'HH:mm:ss'Z'")
NSString* format = fmt == nil ? DEFAULT_DATE_FORMAT : fmt;
[formatter setDateFormat:format];
NSString* dateStr = [formatter stringFromDate:date];
[formatter release];
return dateStr;
}
@end
摘自 RiverAM的專欄