iOS之文件管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Forever_wj/article/details/56840738

沙盒

  • iOS的沙盒机制
    1、iOS的应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,叫做沙盒。它一般存放着程序包文件(可执行文件)、图片、音频、视频、plist文件、sqlite数据库以及其他文件;
    2、每个应用程序都有自己的独立的存储空间(沙盒);
    3、一般来说,应用程序之间是不可以互相访问沙盒的;
    4、模拟器的沙盒位置路径:/User/userName/Library/Application Support/iPhone Simulator

  • 沙盒的构成:当创建应用程序的时候,在每个沙盒中都含有三个文件,分别是Document、Library和temp。
    1、Document:一般需要持久的数据都放在此目录中,可以在当中添加子文件夹,iTunes备份和恢复的时候,会包括此目录;
    2、Library:设置程序的默认设置和其他的状态;
    3、temp:创建临时文件的目录,当iOS设备重启时,文件会被自动清除。

  • 获取沙盒的目录

.h文件
#import <Foundation/Foundation.h>

@interface YDWSandBoxPath : NSObject

// 获取沙盒Document文件目录
+ (NSString *)getDocumentDirectory;

// 获取沙河Library文件目录
+ (NSString *)getLibraryDirectory;

// 获取沙盒Library/Caches文件目录
+ (NSString *)getCacheDirectory;

// 获取沙盒Preference文件目录
+ (NSString *)getPreferencePanesDirectory;

//获取沙盒tmp文件目录
+ (NSString *)getTmpDirectory;

@end


.m文件
#import "YDWSandBoxPath.h"

@implementation YDWSandBoxPath

+ (NSString *)getDocumentDirectory {
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

+ (NSString *)getLibraryDirectory {
    return [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
}

+ (NSString *)getCacheDirectory {
    return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
}

+ (NSString *)getPreferencePanesDirectory {
    return [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) lastObject];
}

+ (NSString *)getTmpDirectory {
    return NSTemporaryDirectory();
}

@end
  • 清除缓存:在开发的过程中,遇到有用的数据,会进行缓存,当该数据不需要时,可以清除。在这里整理了几个方法,统计文件的大小,清除指定文件,清除指定目录下的全部文件等。
// 根据路径返回目录或文件的大小
+ (double)sizeWithFilePath:(NSString *)path {
    // 获取文件的管理者
    NSFileManager *manager = [NSFileManager defaultManager];
    // 检测路径的合理性
    BOOL direct = NO;
    BOOL exits = [manager fileExistsAtPath:path isDirectory:&direct];
    if (!exits) {
        return 0;
    }
    if (direct) {
        NSArray *subPaths = [manager subpathsAtPath:path];
        int totalSize = 0;
        for (NSString *subPath in subPaths) {
            NSString *fullSubPath = [path stringByAppendingPathComponent:subPath];
            BOOL dir = NO;
            [manager fileExistsAtPath:path isDirectory:&dir];
            if (!dir) {
                NSDictionary *attrs = [manager attributesOfItemAtPath:fullSubPath error:nil];
                totalSize += [attrs[NSFileSize] integerValue];
            }
        }
        return totalSize/(1024*1024.0);
    } else {
        NSDictionary *attrs = [manager attributesOfItemAtPath:path error:nil];
        return [attrs[NSFileSize] intValue]/(1024*1024.0);
    }
}

// 得到指定目录下的所有文件
+ (NSArray *)getAllFileNames:(NSString *)dirPath {
    return [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dirPath error:nil];
}

// 删除指定目录或文件
+ (BOOL)clearCacheWithFilePath:(NSString *)path {
    return [[NSFileManager defaultManager] removeItemAtPath:path error:nil];
}

// 清空指定目录下文件
+ (BOOL)clearCacheFormDirectoryPath:(NSString *)dirPath {
    NSArray *fileArray = [YDWSandBoxPath getAllFileNames:dirPath];
    BOOL flag = NO;
    for (NSString *fileName in fileArray) {
        NSString *filePath = [dirPath stringByAppendingPathComponent:fileName];
        flag = [YDWSandBoxPath clearCacheWithFilePath:filePath];
        if (!flag) {
            break;
        }
    }
    return flag;
}

NSData

  • NSData存储的是二进制数据,屏蔽了数据之间的差异,文本、音频、图像等数据都可用NSData来存储;
  • NSData的用法:
    1、NSString与NSData互相转换
    NSData –> NSString为:NSString *dataString = [[NSString alloc] initWithData:[NSData data] encoding:NSUTF8StringEncoding];

    NSString –> NSData为:NSData *stringData = [[NSString string] dataUsingEncoding:NSUTF8StringEncoding];

    将data类型的数据,转成UTF8的数据:

+ (NSString*)dataToUTF8String:(NSData *)data {
    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}

将string转换为指定编码 :

+ (NSString *)changeDataToEncodinString:(NSData *)data encodin:(NSStringEncoding )encoding {
    return [[NSString alloc] initWithData:data encoding:encoding];
}

2、NSData 与 UIImage
NSDat –> UIImage为:UIImage *image = [UIImage imageWithData: imageData];
例如:

- (NSData *)changePictureToNSData {
    NSString *filePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"ceshi.png"]];
    NSData *imageData = [NSData dataWithContentsOfFile:filePath];
    return imageData;
}

Plist文件 ##:

数组、字典只能将BOOL、NSNumber、NSString、NSData、NSDate、NSArray、NSDictionary写入属性列表plist文件.

  • String方式添加
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"xxx.plist"];
    [[NSString string] writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
  • Array方式添加
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"xxx.plist"];
    [[NSArray array] writeToFile:path atomically:YES];
  • Dictionary方式添加
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"xxx.plist"];
    [[NSDictionary dictionary] writeToFile:path atomically:YES];

猜你喜欢

转载自blog.csdn.net/Forever_wj/article/details/56840738