开发者社区> 游贤明> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

FZEasyFile的使用

简介:
+关注继续查看

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




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
云原生(7)-RuoYiCloud本地编译部署
RuoYiCloud本地编译部署
0 0
如何使用Xshell连接阿里云服务器
许多新手第一次买了Linux云服务器都不知道该怎样使用,尤其是没有接触过linux的朋友对命令行界面几乎不了解,今天就记录下使用xshell连接linux服务器的过程。
0 0
zookeeper和kafka的SASL认证以及生产实践
一、什么是zookeeper? ZooKeeper是一个集中的服务,用于维护配置信息、命名、提供分布式同步以及提供组服务。所有这些类型的服务都以某种形式被分布式应用程序使用。每次它们被实现时,都有大量的工作需要去修复不可避免的bug和竞争条件。
1626 0
Devops入门手册
“DevOps”这个词是 ```development``` 和 ```operations``` 这两个词的组合。它是一种促进开发和运维团队之间的协作,以自动化和可重复的方式更快地将代码部署到生产中的**文化**。
1834 0
Prometheus VS InfluxDB
前言 除了传统的监控系统如 Nagios,Zabbix,Sensu 以外,基于时间序列数据库的监控系统随着微服务的兴起越来越受欢迎,比如 Prometheus,比如 InfluxDB。gtt 也尝试了一下这两个系统,希望能找到两者的差别,为以后选型提供一些帮助。
5215 0
编程必备,程序员应该都知道的7款文本编辑器
正如一个作家需要一个文字处理器来写故事,一个艺术家需要画布来创作,同样的,如果想编程,你会需要一个地方来写代码。程序员在哪里编写代码?最常见的就是使用文本编辑器了吧。下文列出了 7 个主流的文本编辑器,不出意外的话,开发人员应该都有所了解,至少听说过。7款文本编辑器,总有一款会适合你。
5545 0
阿里云网络系列之经典网络和专有网络
阿里云面向客户提供的网络类型服务有经典网络和专有网络两种,但这两者有什么区别呢?阿里官网给的解释是: 经典网络:IP地址由阿里云统一分配,配置简便,使用方便,适合对操作易用性要求比较高、需要快速使用 ECS 的用户。
76054 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载