IOS 文件处理

来源:互联网 发布:java https请求带证书 编辑:程序博客网 时间:2024/05/19 23:11

//

//  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 constCGFloat 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 =[LeeFileManagergetDirectoryWithType:type];

    

    NSString *fileDirectory = [directory stringByAppendingPathComponent:folderName];

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

    if ([fileManagerDefaultfileExistsAtPath:fileDirectory]) {

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

    } else {

        NSError *error = nil;

        //创建文件夹

        BOOL res = [fileManagerDefaultcreateDirectoryAtPath:fileDirectory withIntermediateDirectories:YESattributes:nilerror:&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 =  [LeeFileManagercreateFileWithType:FileTypeDocumentfolderName:fileName];

    return path;

}


/**

 *  写入文件

 *

 *  @param type     资源文件路径

 *  @param fileName 写入的文件名称

 *  @param data     data 类型的文件

 *  

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

 *  @return 是否写入成功

 */

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


    NSString * path = [LeeFileManagerpathOfResourceType: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 = [LeeFileManagerpathOfResourceType:type];

    if (fileName) {

       path = [path stringByAppendingPathComponent:fileName];

    }

    

    BOOL res=[fileManagerDefaultremoveItemAtPath:path error:nil];

    if (res) {

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

    }else {

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

    }

    

    return res;

}


/**

 *  读取文件

 *

 *  @param type     资源文件路径

 *  @param fileName 写入的文件名称

 *

 *  @return 读取文件的内容

 */

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

    NSString * path = [LeeFileManagerpathOfResourceType:type];

    if (fileName) {

        path = [path stringByAppendingPathComponent:fileName];

    }

    NSData * data = [NSDatadataWithContentsOfFile:path];

    return data;

    

}


/**

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

 */

+ (void)cleanResourceDisk{

    

    NSString *path =  [LeeFileManagercreateFileWithType:FileTypeDocumentfolderName:@"Resource"];

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

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

    

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

    NSDirectoryEnumerator *fileEnumerator = [fileManagerDefaultenumeratorAtURL:diskCacheURL

                                               includingPropertiesForKeys:resourceKeys

                                                                  options:NSDirectoryEnumerationSkipsHiddenFiles

                                                             errorHandler:NULL];

    

    NSDate *expirationDate = [NSDatedateWithTimeIntervalSinceNow:-maxCacheAge];

    

    NSMutableArray *urlsToDelete = [[NSMutableArrayalloc] init];

    for (NSURL *fileURLin fileEnumerator) {

        NSDictionary *resourceValues = [fileURLresourceValuesForKeys: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 *fileURLin urlsToDelete) {

        [fileManagerDefault removeItemAtURL:fileURL error:nil];

        

    }

 

}




@end







0 0
原创粉丝点击