Chapter 16 Working with Files

Objective-C中的文件操作是由NSFileManager,它包含了常用的文件操作作。
具体如下:
1、创建一个文件。
2、从文件读取。
3、向文件写数据。
4、重命名一个文件。
5、删除一个文件。
6、测试一个文件是否存在。
7、检测一个文件大小以及其他属性。
8、复制一个文件。
9、判断两个文件内容是否相等。
NSFileHandle提供了一些方法,可以让你
1、读写更新一个文件。
2、在某一文件中找到某一位置。
3、向或者从某一文件中读或者写一定字节数的数据。
这些方法也可以应用于硬件和socket。
NSURL很显然就是让你处理url的。
NSBundle用来处理应用束。
Managing Files and Directories: NSFileManager
~用户名,代表某用户的家目录。
.代表当前目录。
..代表上一级目录。
目录名称的话,能获取尽量获取,应该避免自己敲路径,因为这样容易出错。
P379中表16.1列出了NSFileManager中常用的方法。
attributesOfItemAtPath:traverseLink:返回包含文件属性的目录信息。
moveItemAtPath:toPath:能把一个文件从一个目录移动到另一个目录,它也可以移动整个目录,如果两条路径指向同一文件,那该函数的作用是重命名该文件。
attributesOfItemAtPath:error:用来测试一个路径是否为空。
objectForKey:通过使用NSFileSize来获取文件的大小。
removeItemAtPath:error:能删除指定目录下的文件。
stringWithContentsOfFile:encoding:error:能读取某文件中的内容并转化成为字符串对象。
这些方法每个都会返回一个整型值,其中0代表正常,非0代表错误,不同的数字代表不同的错误。
Working with the NSData Class
NSData能提供缓冲区,这类似于C/C++中的buffer,对于32位应用而言该缓冲区大小为2G,对于64位应用而言该缓冲区大小为8E,因此这个缓冲区是足够用的。
它也有mutable和immutable两个版本。
文件缓冲的过程实质上就是文件内容复制的过程。
contentsAtPath:根据一条路径把文件内容读进缓冲区,最后要么返回缓冲区对象要么返回nil。
createFileAtPath:contents:attributes:能用指定的属性创建文件,该文件的内容是某NSData对象。
Working with Directories
P384中表16.2列出了NSFileManager中常用的目录操作方法。
在IOS设备中你的程序是跑在沙箱里的,如果你获取当前路径会发现你的程序正在根目录下,而不是你的目标路径,这都是因为你的程序在沙箱中。
changeCurrentDirectoryPath:更改当前路径。
Enumerating the Contents of a Directory
enumeratorAtPath:能够列出每个文件,如果遇到目录就继续递归地列出那个目录下的所有文件直到没有目录为止。你可以使用skipDescendants来跳过目录。
contentsOfDirectoryAtPath:error:所有文件被放置进一个数组中返回,如果遇到目录不迭代列举。
Working with Paths: NSPathUtilities.h
这个头文件包含了大量的函数和方法,是NSString的扩展,能让你更加灵活多变地操纵路径字符串。
NSTemporaryDirectory返回某目录的路径,该目录可用于创建临时文件。既然是临时文件,你应该在用完以后删除它们。
lastPathComponent用于抽取某路径下的最后一个文件。
stringByAppendingPathComponent:用于把一个文件名添加到一个路径的末尾上去。你可以联合currentDirectoryPath为当前目录下的文件创建完整的路径。
pathExtension为已知的文件提供文件后缀名。
NSHomeDirectory返回当前用户的家目录,你也可以用NSHomeDirectoryForUser返回任何用户的家目录。
pathComponents返回一条路径中的各个组成部分。
Common Methods for Working with Paths
P392中表16.3中列举了常用的路径操作方法。
P393中表16.4中列举了常用的用于获取某一用户信息,比如家目录和存储临时文件的目录的函数。
NSSearchPathForDirectoriesInDomains可以让你定位系统和设备上特定的目录。
P394表16.5列举了常用的IOS路径。
NSSearchPathForDirectoriesInDomains返回一个路径的数组,如果你查找某个用户的路径它会返回一个元素,如果是根据第二个参数则返回的结果可能不止一个元素。当你写IOS应用的时候第二个参数应该是NSUserDomainMask。
Copying Files and Using the NSProcessInfo Class
Unix下命令行中的文件其实是路径的一部分,其实质是路径。如果你写的目的地中文件已经存在,则该文件会被覆盖。
NSProcessInfo类允许你设置和检索某信息的类型。
NSProcessInfo’s arguments返回一个字符串数组。
copyPath:ToPath:handler:不允许文件被覆盖,因此,在应用此方法之前需要用removeFileAtPath:handler:删除原文件
Basic File Operations: NSFileHandle
使用NSFileHandle分为3步:
1、打开文件,获取所指文件的NSFileHandle对象。
2、进行IO操作。
3、关闭文件。
P399表16.7总结了常用的NSFileHandle方法。
NSFileHandle并不提供文件的创建功能。
readDataToEndOfFile:每次最多读取UINT_MAX字节的数据。
readDataOfLength:可以通过建立循环在文件间传输字节缓冲区,这个缓冲区长度可能是8k也可能是128k。
如果一个读取函数没有读取到任何数据,它会返回一个空的NSData对象。你也可以通过对缓冲区应用length所得的结果与0进行比较来判断是否缓冲区中仍然有数据需要被读进来。
seekToFileOffset:可以设置文件指针的位置,如下图所示:


上图中作用的对象是文件句柄databaseHandle,指针的偏移量是10。
offsetInFile用于获取当前文件指针的位置,如下图所示:

seekToEndOfFile返回当前文件指针的位置。
The NSURL Class
不用解释,这个解释处理url的。
一个NSURL对象并不是一个string对象,但是你可以通过URLWithString:把string转换成NSURL,如下图所示:

dictionaryWithContentsOfURL:可以读取某网站的存储属性列表的目录,如果这个属性列表是用数组存储的你可以使用arrayWithContentsOfURL:来读取。
dataWithContentsOfURL:可以让你从某网站读取任意类型的数据。
The NSBundle Class
一个application bundle是指与某应用相关的所有资源,包括图片,图标。
NSBundle让你访问应用中的这些资源。
mainBundle能指出application bundle所在的位置。
pathForResource:ofType:定位application bundle所在位置中的某文件并返回一个路径。
pathsForResourcesOfType:inDirectory:能返回某类型资源的路径,可能是一个数组,这个inDirectory指的是应用程序的子目录,如果目标类型资源不在任何子目录中,则此处实参为@””。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 站在前辈的肩膀上前行 UIKit框架和Foundation框架 所有的Mac OS X和IOS程序都是由大量的对象...
    zysmoon阅读 8,672评论 0 16
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,204评论 9 467
  • 一、iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,叫做沙盒。它一...
    1d5cb7cff98d阅读 1,765评论 0 0
  • 左手捂心 右手执笔 写下思念的诗 寄给最爱的你 时间为笔 月光为笺 清风鸿雁为信使 为你写一封最长情的告白 黑夜中...
    漠北沧海阅读 162评论 0 0