IOS 文件处理

//

//  LeeFileManager.h

//  WEIXUE_IOS

//

//  Created by apple on 15/7/2.

//  Copyright (c) 2015 李重阳. All rights reserved.

//


#import <Foundation/Foundation.h>


/*

 * 文件的根目录的路径

 */

typedef NS_ENUM(NSInteger, FileType) {

    FileTypeDocument = 0,//获取Document目录

    FileTypeLibrary,//获取Library目录

    FileTypeCache//获取Cache目录

};

/*

 * 目录的资源类型

 */

typedef NS_ENUM(NSInteger, ResourceType) {

    ResourceTypePic,  // 图片

    ResourceTypeVideo,// 视频

    ResourceTypeAudio,// 音频

    ResourceTypeOther // 其他类型

};


#define  fileManagerDefault  [NSFileManager defaultManager]


@interface LeeFileManager : NSObject


/*

 * 获得DocumentLibraryCache 中其中一个类型

 *

 */

+ (NSString *)getDirectoryWithType:(FileType)fileType;


/**

 *  创建文件夹

 *

 *  @param type       文件的目录

 *  @param folderName 新创建的文件夹的名字  

 *   如果 要创建 连续的 文件 eg BOOK/BOOK1  就会创建两个文件夹

 *

 *  @return 文件夹的路径

 */

+ (NSString *)createFileWithType:(FileType)type folderName:(NSString *)folderName;


/**

 *  根据资源类型找到该路径

 *

 *  @param type 资源类型

 *

 *  @return 资源类型的路径

 */

+ (NSString *)pathOfResourceType:(ResourceType)type;


/**

 *  写入文件

 *

 *  @param type     资源文件路径

 *  @param fileName 写入的文件名称

 *  @param data     data 类型的文件

 *

 *  @return 是否写入成功

 */

+ (BOOL)writeFileWithResourceType:(ResourceType)type fileName:(NSString *)fileName data:(NSData *)data;


/**

 *  删除文件

 *

 *  @param type     资源文件路径

 *  @param fileName 写入的文件名称

 *

 *  @return 是否删除成功

 */

+ (BOOL)deleteFileWithResourceType:(ResourceType)type fileName:(NSString *)fileName;



/**

 *  读取文件

 *

 *  @param type     资源文件路径

 *  @param fileName 写入的文件名称

 *

 *  @return 读取文件的内容

 */

+ (NSData *)readFileWithResourceType:(ResourceType)type fileName:(NSString *)fileName;


/**

 *  清除 Resource 文件中 超时的文件

 *  - (void)applicationWillTerminate:(UIApplication *)application 中调用

 */

+ (void)cleanResourceDisk;


@end
















//

//  LeeFileManager.m

//  WEIXUE_IOS

//

//  Created by apple on 15/7/2.

//  Copyright (c) 2015 李重阳. All rights reserved.

//


#import "LeeFileManager.h"


//60 * 60 * 24 * 7; // 1 week

static const CGFloat maxCacheAge  = 1; //生命周期


@implementation LeeFileManager


/*

 * 获得DocumentsLibraryCache 中其中一个类型

 *

 */

+ (NSString *)getDirectoryWithType:(FileType)fileType {

    

    NSUInteger type = NSDocumentDirectory;

    if (fileType == FileTypeDocument) {

        type = NSDocumentDirectory;

    }else if (fileType == FileTypeLibrary){

        type = NSLibraryDirectory;

    }else{

        type = NSCachesDirectory;

    }

    NSArray *paths = NSSearchPathForDirectoriesInDomains(type, NSUserDomainMask, YES);

    NSString *directory = [paths objectAtIndex:0];

    return directory;

    

}


/*

 * 创建文件夹

 */

+ (NSString *)createFileWithType:(FileType)type folderName:(NSString *)folderName {

    

    NSString *directory =[LeeFileManager getDirectoryWithType:type];

    

    NSString *fileDirectory = [directory stringByAppendingPathComponent:folderName];

    // 其实这里不判断也是可以的,如果有相同的文件 ,系统会自动 保留以前的文件夹

    if ([fileManagerDefault fileExistsAtPath:fileDirectory]) {

        NSLog(@"文件已存在");

    } else {

        NSError *error = nil;

        //创建文件夹

        BOOL res = [fileManagerDefault createDirectoryAtPath:fileDirectory withIntermediateDirectories:YES attributes:nil error:&error];

        //这个是创建文件资源 例如 1.text  或者没有后缀名的资源

        //    BOOL res=[fileManagerDefault createFileAtPath:fileDirectory contents:nil attributes:nil];

        if (res) {

            NSLog(@"文件创建成功: %@" ,fileDirectory);

        }else{

            fileDirectory = nil;

            NSLog(@"文件创建失败");

        }

    }

    return fileDirectory;

}


/**

 *  根据资源类型找到该路径

 *

 *  @param type 资源类型

 *

 *  @return 资源类型的路径

 */

+ (NSString *)pathOfResourceType:(ResourceType)type {

    

    NSString * fileName = nil;

    if (type == ResourceTypePic) {

        fileName = @"Resource/Pic";

    }else if(type == ResourceTypeVideo){

        fileName = @"Resource/Video";

    }else if(type == ResourceTypeAudio){

        fileName = @"Resource/Audio";

    }else if(type == ResourceTypeOther){

        fileName = @"Resource/Other";

    }

    NSString *path =  [LeeFileManager createFileWithType:FileTypeDocument folderName:fileName];

    return path;

}


/**

 *  写入文件

 *

 *  @param type     资源文件路径

 *  @param fileName 写入的文件名称

 *  @param data     data 类型的文件

 *  

 *  如果是相同的路径会直接覆盖

 *  @return 是否写入成功

 */

+ (BOOL)writeFileWithResourceType:(ResourceType)type fileName:(NSString *)fileName data:(NSData *)data {


    NSString * path = [LeeFileManager pathOfResourceType:type];

    if (fileName) {

        path = [path stringByAppendingPathComponent:fileName];

    }

    BOOL res=[data writeToFile:path atomically:YES];

    if (res) {

        NSLog(@"文件写入成功");

    }else {

        NSLog(@"文件写入失败");

    }

    

    

    return res;

}


/**

 *  删除文件

 *

 *  @param type     资源文件路径

 *  @param fileName 写入的文件名称

 *

 *  @return 是否删除成功

 */

+ (BOOL)deleteFileWithResourceType:(ResourceType)type fileName:(NSString *)fileName {

    

    NSString * path = [LeeFileManager pathOfResourceType:type];

    if (fileName) {

       path = [path stringByAppendingPathComponent:fileName];

    }

    

    BOOL res=[fileManagerDefault removeItemAtPath:path error:nil];

    if (res) {

       NSLog(@"文件删除成功");

    }else {

       NSLog(@"文件删除失败");

    }

    

    return res;

}


/**

 *  读取文件

 *

 *  @param type     资源文件路径

 *  @param fileName 写入的文件名称

 *

 *  @return 读取文件的内容

 */

+ (NSData *)readFileWithResourceType:(ResourceType)type fileName:(NSString *)fileName {

    NSString * path = [LeeFileManager pathOfResourceType:type];

    if (fileName) {

        path = [path stringByAppendingPathComponent:fileName];

    }

    NSData * data = [NSData dataWithContentsOfFile:path];

    return data;

    

}


/**

 *  清除 Resource 文件中 超时的文件

 */

+ (void)cleanResourceDisk{

    

    NSString *path =  [LeeFileManager createFileWithType:FileTypeDocument folderName:@"Resource"];

    NSURL *diskCacheURL = [NSURL fileURLWithPath:path isDirectory:YES];

    NSArray *resourceKeys = @[NSURLIsDirectoryKey, NSURLContentModificationDateKey, NSURLTotalFileAllocatedSizeKey];

    

    // This enumerator prefetches useful properties for our cache files.

    NSDirectoryEnumerator *fileEnumerator = [fileManagerDefault enumeratorAtURL:diskCacheURL

                                               includingPropertiesForKeys:resourceKeys

                                                                  options:NSDirectoryEnumerationSkipsHiddenFiles

                                                             errorHandler:NULL];

    

    NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-maxCacheAge];

    

    NSMutableArray *urlsToDelete = [[NSMutableArray alloc] init];

    for (NSURL *fileURL in fileEnumerator) {

        NSDictionary *resourceValues = [fileURL resourceValuesForKeys:resourceKeys error:NULL];

        

        // Skip directories.

        if ([resourceValues[NSURLIsDirectoryKey] boolValue]) {

            continue;

        }

        // Remove files that are older than the expiration date;

        NSDate *modificationDate = resourceValues[NSURLContentModificationDateKey];

        if ([[modificationDate laterDate:expirationDate] isEqualToDate:expirationDate]) {

            [urlsToDelete addObject:fileURL];

            continue;

        }

    }

    for (NSURL *fileURL in urlsToDelete) {

        [fileManagerDefault removeItemAtURL:fileURL error:nil];

        

    }

 

}




@end







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值