FZEasyFile的使用
https://github.com/jiecao-fm/FZEasyFile
操作沙盒文件很恶心,但用上FZEasyFile就变得简单了.
以前你需要这么做才行:
NSFileManager *fileManager = [NSFileManager defaultManager]; //获取document路径,括号中属性为当前应用程序独享 NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDirectory = [directoryPaths objectAtIndex:0]; //查找文件夹,如果不存在,就创建一个文件夹 NSString *dir = [documentDirectory stringByAppendingPathComponent:@SAVEDIR]; NSLog(@"cache dir %@", dir); if(![fileManager fileExistsAtPath:dir]) { if(![fileManager createDirectoryAtPath:dir withIntermediateDirectories:YES attributes:nil error:nil]) { NSLog(@"create dir:(%@) error", dir); return; } } //定义记录文件全名以及路径的字符串filePath NSString *filePath = [dir stringByAppendingPathComponent:[[NSString alloc]initWithFormat:@"/%@", filename]]; //查找文件,如果不存在,就创建一个文件 NSData *data = [lHtml dataUsingEncoding:NSUTF8StringEncoding]; if (![fileManager fileExistsAtPath:filePath]) { [fileManager createFileAtPath:filePath contents:data attributes:nil]; }
现在你只需要这么做:
FZEasyFile *easyFile = [FZEasyFile sharedInstance];
[easyFile createFile:fileName overwrite:NO];
NSOutputStream *output = [NSOutputStream outputStreamToFileAtPath:[easyFile fullFileName:fileName] append:NO];
so easy :)
附录:
以下为我自己修改的版本,感谢原作者的分享精神!
EasyFile.h
// // EasyFile.h // EasyFile // // Copyright (c) 2014年 zhou jun All rights reserved. // #import <Foundation/Foundation.h> typedef enum { /* /Documents /Library/Caches /Library/Preferences /tmp */ DOCUMENTS = 0x99, CACHES, PREFERENCES, TMP, } EFolderFlag; @interface EasyFile : NSObject /** convert the short file name to full file name. e.g. "mycache/user/icon.png" -> "/Users/zhoujun/Library/Application Support/iPhone Simulator/7.1/Applications/ABCE2119-E864-4492-A3A9-A238ADA74BE5/Documents/mycache/user/icon.png". @return full file name. */ + (NSString *)fullFileName:(NSString *)shortFileName folderType:(EFolderFlag)type; /** create a file @param fileName fileName file path and file name, e.g. "mycache/user/icon.png". @param shouldOverwrite YES:if the file exists then overwirte it, NO:if the file exists then do nothing */ + (void)createFile:(NSString *)fileName overwrite:(BOOL)flag folderType:(EFolderFlag)type; /** test if the file exists. @param fileName file path and file name, e.g. "mycache/user/icon.png". @return YES if exists, NO otherwise. */ + (BOOL)isFileExists:(NSString *)fileName folderType:(EFolderFlag)type; @end
EasyFile.m
// // EasyFile.m // EasyFile // // Copyright (c) 2014年 zhou jun All rights reserved. // #import "EasyFile.h" @implementation EasyFile + (NSString *)fullFileName:(NSString *)shortFileName folderType:(EFolderFlag)type { NSString *rootPath = NSHomeDirectory(); switch (type) { case DOCUMENTS: rootPath = [NSHomeDirectory() stringByAppendingString:@"/Documents"]; break; case CACHES: rootPath = [NSHomeDirectory() stringByAppendingString:@"/Library/Caches"]; break; case PREFERENCES: rootPath = [NSHomeDirectory() stringByAppendingString:@"/Library/Preferences"]; break; case TMP: rootPath = [NSHomeDirectory() stringByAppendingString:@"/tmp"]; break; default: rootPath = [NSHomeDirectory() stringByAppendingString:@"/Documents"]; break; } NSString *file = [rootPath stringByAppendingPathComponent:shortFileName]; return file; } + (void)createFile:(NSString *)fileName overwrite:(BOOL)flag folderType:(EFolderFlag)type { NSFileManager *fileManager = [NSFileManager defaultManager]; NSRange lastTag = [fileName rangeOfString:@"/" options:NSBackwardsSearch]; if (lastTag.location != NSNotFound && lastTag.location != 0) { NSString *shortDir = [fileName substringToIndex:lastTag.location]; NSString *fullDir = [self fullFileName:shortDir folderType:type]; if (![fileManager fileExistsAtPath:fullDir]) { [fileManager createDirectoryAtPath:fullDir withIntermediateDirectories:YES attributes:nil error:nil]; } } NSString *file = [self fullFileName:fileName folderType:type]; if (flag || ![fileManager fileExistsAtPath:file]) { BOOL suc = [fileManager createFileAtPath:file contents:nil attributes:nil]; NSLog(@"create file(%@) %@", file, suc ? @"successfully" : @"failed"); } } + (BOOL)isFileExists:(NSString *)fileName folderType:(EFolderFlag)type { NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *file = [self fullFileName:fileName folderType:type]; return [fileManager fileExistsAtPath:file]; } @end