首页 > 系统 > iOS > 正文

iOS之文件管理

2019-11-08 00:13:45
字体:
来源:转载
供稿:网友

沙盒

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];
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表