iOS文件操作

来源:互联网 发布:数据新闻手册中文版 编辑:程序博客网 时间:2024/06/08 14:51

iOS为每个应用提供了独立的文件空间,一个应用只能直接访问为本应用分配的目录,不可以访问其他的目录,每个应用自己独自的访问空间被称为该应用的沙箱(sandBox):  

1:Bundle container(这里通常存放的是应用创建时所携带的资源,即APP的程序文件)

2:Data container(用户使用应用时产生的资源和数据,即运行时产生的不同文件,Doucuments,Libary,Temp)   

3:iCloud container(数据云同步)

一:iOS访问文件目录

系统函数:NSArray<NSString*>*NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde)

- (void)showPathForDirectoriesInDomains{ NSLog(@"%@",[NSStringstringWithFormat:@"Applications:%@\nUsers:%@\nDocuments:%@\nLibary:%@\nLibary/Caches:%@\nLibary/Application Support:%@\n",   NSSearchPathForDirectoriesInDomains(NSApplicationDirectory,   NSUserDomainMask,YES),   NSSearchPathForDirectoriesInDomains(NSUserDirectory, NSUserDomainMask,YES),   NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES),   NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask,YES),   NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask,YES),   NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask,YES)]);}

函数说明:

NSSearchPathForDirectoriesInDomains()函数是一个C语言的函数,可以查找各种目录。

第一个常量NSApplicationDirectoryApplications目录)、NSUserDirectoryUsers目录)、NSDocumentDirectoryDocuments路径)等,表明正在查找的目录路径。

第二个常量NSUserDomainMask(应用的沙盒)表明我们限制的搜索范围。

二:NSFileManager操作

1:路径查询

#pragma -mark - 路径查询- (void)searchBtnClick{    NSLog(@"%@",[NSString stringWithFormat:@"浅搜索:%@",[[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0].path error:nil]]);}

2:创建文件

#pragma -mark - 创建文件- (void)createfileBtnClick{    NSURL *baseUrl = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0];    NSURL *fileUrl = [baseUrl URLByAppendingPathComponent:@"nancy.txt" isDirectory:true];    NSLog(@"fileUrl = %@",fileUrl);    if (![[NSFileManager defaultManager] fileExistsAtPath:fileUrl.path]) {        NSData *data = [@"创建文件时写入的数据" dataUsingEncoding:NSUTF8StringEncoding];        [[NSFileManager defaultManager] createFileAtPath:fileUrl.path contents:data attributes:nil];        NSLog(@"nancy.txt 创建成功");    }else{        NSLog(@"nancy.txt 已经存在");    }}

3:创建文件夹

#pragma -mark - 创建文件夹- (void)createFolderBtnClick{    NSURL *baseUrl = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0];    NSURL *folderUrl = [baseUrl URLByAppendingPathComponent:@"nancy" isDirectory:true];    NSLog(@"folderUrl = %@",folderUrl);    if (![[NSFileManager defaultManager] fileExistsAtPath:folderUrl.path]) {        [[NSFileManager defaultManager] createDirectoryAtURL:folderUrl withIntermediateDirectories:YES attributes:nil error:nil];        NSLog(@"nancy 创建成功");    }else{        NSLog(@"nancy 已经存在");    }}

4:删除文件

#pragma -mark - 删除文件- (void)removeFileBtnClick{    NSURL *baseUrl = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0];    NSURL *fileUrl = [baseUrl URLByAppendingPathComponent:@"nancy.txt" isDirectory:true];    if ([[NSFileManager defaultManager] fileExistsAtPath:fileUrl.path]) {        [[NSFileManager defaultManager] removeItemAtPath:fileUrl.path error:nil];        NSLog(@"nancy.txt文件删除成功");    }else{        NSLog(@"nancy.txt文件不存在,先创建文件");    }    }

5:删除文件夹

#pragma -mark - 删除文件夹- (void)removeFolderBtnClick{    NSURL *baseUrl = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0];    NSURL *folderUrl = [baseUrl URLByAppendingPathComponent:@"nancy" isDirectory:true];    if ([[NSFileManager defaultManager] fileExistsAtPath:folderUrl.path]) {        [[NSFileManager defaultManager] removeItemAtURL:folderUrl error:nil];        NSLog(@"nancy文件夹删除成功");    }else{        NSLog(@"nancy文件夹不存在");    }    

三:NSFileHandel操作

1:文件数据读取

#pragma -mark - 文件数据读取- (void)readBtnClick{    NSURL *baseUrl = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0];    NSURL *fileUrl = [baseUrl URLByAppendingPathComponent:@"nancy.txt" isDirectory:true];    if ([[NSFileManager defaultManager] fileExistsAtPath:fileUrl.path]) {        NSFileHandle *fileHandel = [NSFileHandle fileHandleForReadingAtPath:fileUrl.path];        //设置距离文章开头的偏移量        [fileHandel seekToFileOffset:0];        NSData *data = [fileHandel readDataToEndOfFile];        NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];        self.fileHandelLabel.text = string;    }else{        self.fileHandelLabel.text = @"";        NSLog(@"nancy.txt文件不存在,先创建文件");    }}

2:文件数据写入

#pragma -mark - 文件数据写入- (void)writeBtnClick{    NSURL *baseUrl = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0];    NSURL *fileUrl = [baseUrl URLByAppendingPathComponent:@"nancy.txt" isDirectory:true];    if ([[NSFileManager defaultManager] fileExistsAtPath:fileUrl.path]) {        NSString *string =  @"添加一些文字到文件的末尾";        self.fileHandelLabel.text = string;        NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];        NSFileHandle *writeHandel = [NSFileHandle fileHandleForWritingToURL:fileUrl error:nil];        [writeHandel seekToEndOfFile];        [writeHandel writeData:data];    }else{        self.fileHandelLabel.text = @"";        NSLog(@"nancy.txt文件不存在,先创建文件"];    }}

四:Bundle操作

iOS中提到的bundle,它存放的是应用可执行文件及相关资源文件。这个位置的所有文件在系统运行时只具有可读或者可执行的权限。

bundle中主要有以下几种类型的文件:

1:info plist(必须有的文件,用来配置应用的基本参数信息,包括版本号,指向可执行文件名,包名)

2:可执行文件(每个应用程序必须有一个可执行文件)

3:资源文件(可执行以外的文件,常用的如图像,图标,音频文件,视图文件,配置文件等)";

1:获取NSBundel的资源

#pragma -mark - NSBundle的资源- (void)bundleResourceBtnClick{    NSURL *pathUrl = [[NSBundle mainBundle] URLForResource:@"AppIcon29x29@2x" withExtension:@"png"];    NSString *pathStr = [[NSBundle mainBundle] pathForResource:@"AppIcon60x60@3x" ofType:@"png"];    NSLog(@"%@",[NSString stringWithFormat:@"pathUrl = %@ \n pathStr = %@",pathUrl,pathStr]);}

2:获取Bundel的信息

#pragma -mark - Bundle的信息- (void)bundleInfoBtnClick{    NSLog(@"infoPlist: %@",[[NSBundle mainBundle] infoDictionary]);    NSBundle *mainBundle = [NSBundle mainBundle];    NSLog(@"%@",[NSString stringWithFormat:@"BundleID(应用程序唯一标识): %@\n BundleVerson(应用编译版本号): %@ \n BundleName(应用的Bundel名): %@ \n BundleExecutable(应用可执行程序的名称): %@ \n MinimumOSVersion(最低系统): %@",mainBundle.bundleIdentifier,[mainBundle objectForInfoDictionaryKey:@"CFBundleVersion"],[mainBundle objectForInfoDictionaryKey:@"CFBundleName"],[mainBundle objectForInfoDictionaryKey:@"CFBundleExecutable"],[mainBundle objectForInfoDictionaryKey:@"MinimumOSVersion"]]);}


1 0
原创粉丝点击