zoukankan      html  css  js  c++  java
  • iOS文件处理类

    iOS文件处理类

    这是一个用来简化iOS中关于文件操作的一个类,所有方法都为类方法.

    Source

    File.h

    //
    //  File.h
    //  FileManager
    //
    //  http://home.cnblogs.com/u/YouXianMing/
    //
    //  Copyright (c) 2014年 YouXianMing All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    #define FILE_PATH(filePath)       [File path:(filePath)]
    #define ROOT_PATH                 [File rootPath]
    #define BUNDLE_PATH(fileName)     [File bundleSource:(fileName)]
    #define CREATE_FOLDER(folderPath) [File createFolder:(folderPath)]
    #define FILE_EXIST(filePath)      [File exist:(filePath)]
    #define IS_DIRECTORY(filePath)    [File isDirectory:(filePath)]
    #define IS_FILE(filePath)         ![File isDirectory:(filePath)]
    #define FILE_INFO(filePath)       [File fileInfo:(filePath)]
    #define FILE_SIZE(filePath)       [File fileSize:(filePath)]
    #define FILE_DICTIONARY(filePath) [File dictionaryFrom:(filePath)]
    #define FILE_ARRAY(filePath)      [File arrayFrom:(filePath)]
    
    @interface File : NSObject
    
    /*
     注意:凡是参数为 filePath folderPath 的全部为相对路径,用以下字符串拼接使用
     
     /Documents
     /Library/Caches
     /Library/Preferences
     /tmp
     
     其他都为绝对路径
     */
    
    + (NSString *)rootPath;
    + (NSString *)bundleSource:(NSString *)fileName;
    + (NSString *)path:(NSString *)filePath;
    + (BOOL)createFolder:(NSString *)filePath;
    + (BOOL)exist:(NSString *)filePath;
    + (BOOL)isDirectory:(NSString *)filePath;
    + (NSDictionary *)fileInfo:(NSString *)filePath;
    + (int)fileSize:(NSString *)filePath;
    + (NSArray *)enumeratorFolder:(NSString *)folderPath;
    + (void)enumeratorFolder:(NSString *)folderPath each:(void (^)(NSString *path))each;
    
    + (BOOL)copyFrom:(NSString *)sourcePath to:(NSString *)targetPath;
    + (BOOL)moveFrom:(NSString *)sourcePath to:(NSString *)targetPath;
    + (BOOL)remove:(NSString *)targetPath;
    
    + (BOOL)writePlist:(id)plist to:(NSString *)filePath;
    + (NSMutableDictionary *)dictionaryFrom:(NSString *)filePath;
    + (NSMutableArray *)arrayFrom:(NSString *)filePath;
    + (void)path:(NSString *)filePath dictionary:(void (^)(NSMutableDictionary *dictionary))dictionary;
    + (void)path:(NSString *)filePath array:(void (^)(NSMutableArray *array))array;
    
    @end

    File.m

    //
    //  File.m
    //  FileManager
    //
    //  http://home.cnblogs.com/u/YouXianMing/
    //
    //  Copyright (c) 2014年 YouXianMing All rights reserved.
    //
    
    #import "File.h"
    
    static NSString *_sandBoxPath = nil;
    
    @implementation File
    
    + (void)initialize
    {
        if (self == [File class])
        {
            _sandBoxPath = NSHomeDirectory();
        }
    }
    
    + (NSString *)rootPath
    {
        return _sandBoxPath;
    }
    
    + (NSString *)path:(NSString *)filePath
    {
        return [_sandBoxPath stringByAppendingPathComponent:filePath];
    }
    
    + (BOOL)createFolder:(NSString *)filePath
    {
        return [[NSFileManager defaultManager] createDirectoryAtPath:[self path:filePath]
                                         withIntermediateDirectories:YES
                                                          attributes:nil
                                                               error:nil];
    }
    
    + (NSString *)bundleSource:(NSString *)fileName
    {
        return [[NSBundle mainBundle] pathForResource:fileName
                                               ofType:nil];
    }
    
    + (BOOL)exist:(NSString *)filePath
    {
        return [[NSFileManager defaultManager] fileExistsAtPath:[self path:filePath]
                                                    isDirectory:NO];
    }
    
    + (BOOL)isDirectory:(NSString *)filePath
    {
        BOOL isDirectory = NO;
        
        [[NSFileManager defaultManager] fileExistsAtPath:[self path:filePath]
                                             isDirectory:&isDirectory];
        
        return isDirectory;
    }
    
    + (BOOL)copyFrom:(NSString *)sourcePath to:(NSString *)targetPath
    {
        return [[NSFileManager defaultManager] copyItemAtPath:sourcePath
                                                       toPath:targetPath
                                                        error:nil];
    }
    
    + (BOOL)moveFrom:(NSString *)sourcePath to:(NSString *)targetPath
    {
        return [[NSFileManager defaultManager] moveItemAtPath:sourcePath
                                                       toPath:targetPath
                                                        error:nil];
    }
    
    + (BOOL)remove:(NSString *)targetPath
    {
        return [[NSFileManager defaultManager] removeItemAtPath:targetPath
                                                          error:nil];
    }
    
    + (NSArray *)enumeratorFolder:(NSString *)folderPath
    {
        if ([self isDirectory:folderPath])
        {
            NSMutableArray *storeArray = [NSMutableArray array];
            
            NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:folderPath];
            NSFileManager *localFileManager = [[NSFileManager alloc] init];
            NSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:docsDir];
            
            NSString *file;
            while ((file = [dirEnum nextObject]))
            {
                [storeArray addObject:[folderPath stringByAppendingPathComponent:file]];
            }
            
            return storeArray;
        }
        else
        {
            return nil;
        }
    }
    
    + (void)enumeratorFolder:(NSString *)folderPath each:(void (^)(NSString *path))each
    {
        if ([self isDirectory:folderPath])
        {
            NSMutableArray *storeArray = [NSMutableArray array];
            
            NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:folderPath];
            NSFileManager *localFileManager = [[NSFileManager alloc] init];
            NSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:docsDir];
            
            NSString *file;
            while ((file = [dirEnum nextObject]))
            {
                [storeArray addObject:[folderPath stringByAppendingPathComponent:file]];
            }
            
            [storeArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
                each(obj);
            }];
        }
    }
    
    + (NSDictionary *)fileInfo:(NSString *)filePath
    {
        return [[NSFileManager defaultManager] attributesOfItemAtPath:[self path:filePath]
                                                                error:nil];
    }
    
    + (int)fileSize:(NSString *)filePath
    {
        return [[[[NSFileManager defaultManager] attributesOfItemAtPath:[self path:filePath]
                                                                  error:nil] 
                 objectForKey:@"NSFileSize"] intValue];
    }
    
    + (BOOL)writePlist:(id)plist to:(NSString *)filePath
    {
        if ([plist isKindOfClass:[NSDictionary class]])
        {
            NSDictionary *point = plist;
            
            return [point writeToFile:[self path:filePath]
                           atomically:YES];
        }
        else if ([plist isKindOfClass:[NSArray class]])
        {
            NSArray *point = plist;
            
            return [point writeToFile:[self path:filePath]
                           atomically:YES];
        }
        else
        {
            return NO;
        }
    }
    
    + (NSMutableDictionary *)dictionaryFrom:(NSString *)filePath
    {
        NSMutableDictionary *dictionary = 
            [[NSMutableDictionary alloc] initWithContentsOfFile:[self path:filePath]];
        
        return dictionary;
    }
    
    + (NSMutableArray *)arrayFrom:(NSString *)filePath
    {
        NSMutableArray *array = 
            [[NSMutableArray alloc] initWithContentsOfFile:[self path:filePath]];
        
        return array;
    }
    
    + (void)path:(NSString *)filePath dictionary:(void (^)(NSMutableDictionary *dictionary))dictionary
    {
        NSMutableDictionary *sourceDictionary = 
            [[NSMutableDictionary alloc] initWithContentsOfFile:[self path:filePath]];
        
        dictionary(sourceDictionary);
        
        [sourceDictionary writeToFile:[self path:filePath]
                           atomically:YES];
    }
    
    + (void)path:(NSString *)filePath array:(void (^)(NSMutableArray *array))array
    {
        NSMutableArray *sourceArray = 
        [[NSMutableArray alloc] initWithContentsOfFile:[self path:filePath]];
        
        array(sourceArray);
        
        [sourceArray writeToFile:[self path:filePath]
                      atomically:YES];
    }
    
    @end

    Usage

    获取沙盒中Documents目录下的一个文本文件YouXianMing.txt

    判断这个沙盒中Documents目录下的一个文本文件YouXianMing.txt是否存在

    判断沙盒中Documents目录下的一个文本文件YouXianMing.txt是否为一个文件

    沙盒中Documents目录下的一个文本文件YouXianMing.txt的大小

    读取/Library/Preferences目录下的一个字典类型的plist文件YouXianMing.plist

    在沙盒根目录下创建文件夹层级结构/A/B/C

    将根目录下的A文件夹以及子文件夹拷贝到Documents下的A文件夹当中

    将集合(数组或者字典)写到/Library/Preferences下的tmp.plist当中

    读取/Library/Preferences目录下的tmp.plist,修改其中的一个值并保存

    没举例子的自己试一下就知道了.

    so easy :) enjoy it.

  • 相关阅读:
    Uni项目启动微信、QQ、淘宝、抖音、京东等APP的方法
    input 标签为checkbox时修改 checkbox的样式
    关于CSS HACK
    前端JS生成可用的MD5加密代码
    把ucharts 封装成组件
    学期总结
    作业1
    作业02
    C语言I博客作业09
    C语言I博客作业08
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3711758.html
Copyright © 2011-2022 走看看