详解iOS学习笔记(十七)——文件操作(NSFileManager)

iOS的沙盒机制,应用只能访问自己应用目录下的文件。iOS不像Android,没有SD卡概念,不能直接访问图像、视频等内容。iOS应用产生的内容,如图像、文件、缓存内容等都必须存储在自己的沙盒内。默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。Library包含Caches、Preferences目录。

上面的完整路径为:用户->资源库->Application Support->iPhone Simulator->6.1->Aplications

Documents:苹果建议将程序创建产生的文件以及应用浏览产生的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录

Library:存储程序的默认设置或其它状态信息;

Library/Caches:存放缓存文件,保存应用的持久化数据,用于应用升级或者应用关闭后的数据保存,不会被itunes同步,所以为了减少同步的时间,可以考虑将一些比较大的文件而又不需要备份的文件放到这个目录下。

tmp:提供一个即时创建临时文件的地方,但不需要持久化,在应用关闭后,该目录下的数据将删除,也可能系统在程序不运行的时候清除。

iOS怎么获取沙盒路径,怎么操作文件呢?下面给出答案。

获取应用沙盒根路径:

-(void)dirHome{
  NSString *dirHome=NSHomeDirectory();
  NSLog(@"app_home: %@",dirHome);
} 

获取Documents目录路径:

//获取Documents目录
-(NSString *)dirDoc{
  //[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSLog(@"app_home_doc: %@",documentsDirectory);
  return documentsDirectory;
} 

获取Library目录路径:

//获取Library目录
-(void)dirLib{
  //[NSHomeDirectory() stringByAppendingPathComponent:@"Library"];
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
  NSString *libraryDirectory = [paths objectAtIndex:0];
  NSLog(@"app_home_lib: %@",libraryDirectory);
} 

获取Cache目录路径:

//获取Cache目录
-(void)dirCache{
  NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
  NSString *cachePath = [cacPath objectAtIndex:0];
  NSLog(@"app_home_lib_cache: %@",cachePath);
} 

获取Tmp目录路径:

//获取Tmp目录
-(void)dirTmp{
  //[NSHomeDirectory() stringByAppendingPathComponent:@"tmp"];
  NSString *tmpDirectory = NSTemporaryDirectory();
  NSLog(@"app_home_tmp: %@",tmpDirectory);
} 

创建文件夹:

//创建文件夹
-(void *)createDir{
  NSString *documentsPath =[self dirDoc];
  NSFileManager *fileManager = [NSFileManager defaultManager];
  NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];
  // 创建目录
  BOOL res=[fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];
  if (res) {
    NSLog(@"文件夹创建成功");
  }else
    NSLog(@"文件夹创建失败");
 } 

创建文件

 //创建文件
-(void *)createFile{
  NSString *documentsPath =[self dirDoc];
  NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];
  NSFileManager *fileManager = [NSFileManager defaultManager];
  NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];
  BOOL res=[fileManager createFileAtPath:testPath contents:nil attributes:nil];
  if (res) {
    NSLog(@"文件创建成功: %@" ,testPath);
  }else
    NSLog(@"文件创建失败");
}

写数据到文件:

//写文件
-(void)writeFile{
  NSString *documentsPath =[self dirDoc];
  NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];
  NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];
  NSString *content=@"测试写入内容!";
  BOOL res=[content writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
  if (res) {
    NSLog(@"文件写入成功");
  }else
    NSLog(@"文件写入失败");
}

读文件数据:

//读文件
-(void)readFile{
  NSString *documentsPath =[self dirDoc];
  NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];
  NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];
//  NSData *data = [NSData dataWithContentsOfFile:testPath];
//  NSLog(@"文件读取成功: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
  NSString *content=[NSString stringWithContentsOfFile:testPath encoding:NSUTF8StringEncoding error:nil];
  NSLog(@"文件读取成功: %@",content);
}

文件属性:

//文件属性
-(void)fileAttriutes{
  NSString *documentsPath =[self dirDoc];
  NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];
  NSFileManager *fileManager = [NSFileManager defaultManager];
  NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];
  NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:testPath error:nil];
  NSArray *keys;
  id key, value;
  keys = [fileAttributes allKeys];
  int count = [keys count];
  for (int i = 0; i < count; i++)
  {
    key = [keys objectAtIndex: i];
    value = [fileAttributes objectForKey: key];
    NSLog (@"Key: %@ for value: %@", key, value);
  }
}

删除文件:

//删除文件
-(void)deleteFile{
  NSString *documentsPath =[self dirDoc];
  NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];
  NSFileManager *fileManager = [NSFileManager defaultManager];
  NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];
  BOOL res=[fileManager removeItemAtPath:testPath error:nil];
  if (res) {
    NSLog(@"文件删除成功");
  }else
    NSLog(@"文件删除失败");
  NSLog(@"文件是否存在: %@",[fileManager isExecutableFileAtPath:testPath]?@"YES":@"NO");
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Swift 共享文件操作小结(iOS 8 +)

    前言 适用于 iOS 8 + 本地共享文件列表 正文 一.准备 1.1 默认 App 的文件共享是关闭的,需要在 plist 中设置启用: Application supports iTunes file sharing 设置为 YES 启用后把设备连接到 iTunes 上,在 iTunes 应用里的文件共享就能看到你的 App 了(如果看不见需要断开重新拔插一下数据线),可以拷贝一些视频进去,便于测试. 1.2 导入库 Photos.framework AVKit.framework 用于播放

  • IOS 基本文件操作实例详解

    IOS 基本文件操作实例详解 在iOS的App沙盒中,Documents和Library/Preferences都会被备份到iCloud,因此只适合放置一些记录文件,例如plist.数据库文件.缓存一般放置到Library/Caches,tmp文件夹会被系统随机清除,不适宜防止数据. [图片缓存的清除] 在使用SDWebImage时,图片被大量的缓存,有时需要获取缓存的大小以及清除缓存. 要获取缓存大小,使用SDImageCache单例的getSize方法拿到byte为单位的缓存大小,注意计算时

  • 详解iOS学习笔记(十七)——文件操作(NSFileManager)

    iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像Android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录. 上面的完整路径为:用户->资源库->Application Support->iPhone Simulator->6.1->Aplica

  • 详解Angular6学习笔记之主从组件

    主从组件 继学习笔记6,现在可以在页面上显示一个数组,但是原则上不能将所有特性放在同一个组件中,因为如果将所有特性放在同一个组件中,当特性特别多时,组件就变得不好维护了.所以要将大型组件拆分为多个小型组件,使每一个小型组件集中处理某一个特性任务或者工作流,而且这样也便于维护. 这次要将学习笔记6中的查看hero详情,放置在一个新的,独立,可复用的组件中,集中在新的组件管理和维护hero详情的信息. 1.创建一个新的组件 使用 Angular CLI 生成一个名叫 hero-detail 的新组件

  • 详解Angular2学习笔记之Html属性绑定

    简介 基本HTML属性 <td [attr.colspan]="tableColspan"></td> Css 类绑定 <!-- 第一种情况 class 类全部替换 --> <div [class]="divClass">CSS 类绑定,[class] 全部替换的例子</div> <!-- 第二种情况 替换 class 类的部分属性 --> <div [class.a]="isS

  • 详解Docker学习笔记之搭建一个JAVA Tomcat运行环境

    前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装.部署和升级,非常方便.因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法.更多的玩法还有大规模 web 应用.数据库部署.持续部署.集群.测试环境.面向服务的云计算.虚拟桌面 VDI 等等. 主观的印象:Docker 使用 Go 语言编写,用 cgroup 实现

  • 详解python学习笔记之解释器

    目录 1.python教程 1.1 概述 1.2 python标准库 1.3 python语言参考手册 1.4 python包索引 1.5 术语对照表 2.课前甜点 3.python解析器 3.1 传入参数 3.2 交互式运行 3.2.1 可执行的Python脚本 3.2.2 交互式启动文件 3.3 解释器的运行环境( 源文件的字符编码) 总结 1.python教程 基于 python3.10 的持续解读,旨在快速回忆加深理解,节约自己的时间成本 1.1 概述 python 是一门易于学习的编程

  • Perl学习笔记之文件操作

    Perl对文件的操作,跟其它的语言类似,无非也就是打开,读与写的操作. 1. 打开文件 #! c:/perl/bin/perl -w use utf8; use strict; use warnings; my $filename = 'test.txt'; # 或者用绝对路径,如: c:/perl/Learn/test.txt if(open(MYFILE,$filename)) # MYFILE是一个标志 { printf "Can open this file:%s!", $fi

  • 详解Vue学习笔记进阶篇之列表过渡及其他

    本文将介绍Vue中的列表过渡,动态过渡, 以及可复用过渡是实现. 列表过渡 目前为止,关于过渡我们已经讲到: 单个节点 同一时间渲染多个节点中的一个 那么怎么同时渲染整个列表,比如使用 v-for ?在这种场景中,使用 <transition-group>组件.在我们深入例子之前,先了解关于这个组件的几个特点: 不同于 <transition>, 它会以一个真实元素呈现:默认为一个<span>.你也可以通过 tag 特性更换为其他元素. 内部元素 总是需要 提供唯一的

  • 详解Vue学习笔记入门篇之组件的内容分发(slot)

    介绍 为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 "transclusion" 如果你熟悉 Angular).Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽. 编译作用域 在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译.假定模板为: <child-component> {{ message }} </child-component> mess

  • Go语言学习笔记之文件读写操作详解

    目录 文件写 文件读 小结 文件操作比较多,分为几篇来写吧.首先是文件的读写,在平时的工程化操作中使用最多. 文件写 样例代码如下 package main import ( "bufio" "fmt" "io" "os" ) //写文件 func DoWriteFile() error { _filePath := "./test.txt" _file, _err := os.OpenFile(_file

  • 微信小程序学习笔记之文件上传、下载操作图文详解

    本文实例讲述了微信小程序学习笔记之文件上传.下载操作.分享给大家供大家参考,具体如下: 前面介绍了微信小程序登录API与获取用户信息操作.这里再来介绍一下文件的上传与下载操作. [文件上传]wx.uploadFile (以上传图片为例) 后台上传接口Upload.php:(tp5) <?php namespace app\home\controller; use think\Controller; class Upload extends First { //上传图片API public fun

随机推荐