FZEasyFile的使用

https://github.com/jiecao-fm/FZEasyFile

操作沙盒文件很恶心,但用上FZEasyFile就变得简单了.

以前你需要这么做才行:

NSFileManager *fileManager = [NSFileManager defaultManager];

    //获取document路径,括号中属性为当前应用程序独享
NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [directoryPaths objectAtIndex:]; //查找文件夹,如果不存在,就创建一个文件夹
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 != )
{
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

FZEasyFile的使用的更多相关文章

  1. iOS 利用FZEasyFile本地保存 和 常规保存

    1.常规保存(较麻烦) NSFileManager *fileManager = [NSFileManager defaultManager]; //获取document路径,括号中属性为当前应用程序 ...

随机推荐

  1. 使用Hive Rest API 连接HDInsight

    以下连接是微软最新的关于HDInsight中Hive命令的RestAPI示例地址.. 使用 HDInsight .NET SDK 运行 Hive 查询 请使用接口有异常的同学检查是否使用的是下面地址中 ...

  2. Android捕捉图像后在SurfaceView上变形显示问题的处理

    我们在Android中经常会使用SurfaceView编写自定义的摄像头,可是有的时候会经常会出现图像的变形,我们就会很郁闷的问这到底是为什么呢?其实这个最根本的原因是SurfaceView和PreV ...

  3. nginx内网代理为外网地址

    #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...

  4. MySql的内置函数

    MySQL的内置函数不但可以在SELECT查询语句中应用,同样也可以在INSERT.UPDATE和DELECT等语句中应用.例如,在INSERT添加语句中,应用日期时间函数获取系统的当前时间,并且将其 ...

  5. Android新手常见问题(一)

    [1]AAPT2 error: check logs for details File->Settings->Build->Gradle一看path里有中文 最根本的原因是因为use ...

  6. step4: Xpath的使用

    XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 包含一个标准函数库. XPath 是一个 W3C 标准. 语法简介: htt ...

  7. Lakeshore用户手册

    1.场景 场景是游戏的基本组成部分,开始界面,结束界面,每个关卡都是一个场景.游戏中基于游戏的情节,可以在各个场景间跳转. 2.精灵 精灵可以理解为图片的容器.如果需要在游戏场景中插入一个静态图片,那 ...

  8. java 并发(六) --- 锁

          阅读前阅读以下参考资料,文章图片或代码部分来自与参考资料 概览 一张图了解一下java锁. 注 : 阻塞将会切换线程,切换内核态和用户态,是比较大的性能开销 各种锁 为什么要设置锁的等级 ...

  9. package.json中^符号和~符号前缀的区别

          开发中经常会使用npm install 安装依赖包,经常会看到^符号和~符号,现将二者的区别总结如下:     版本号 x.y.z : z :表示一些小的bugfix, 更改z的号, y ...

  10. 二:SpringMVC知识整理

    springmvc复习: 1.SpringMVC介绍 2.SpringMVC入门程序 1)创建web工程 2)导入jar包 3)在web.xml中配置前端控制器(指定上下文件的路径 classpath ...