iOS文件操作

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值