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指的是应用程序的子目录,如果目标类型资源不在任何子目录中,则此处实参为@””。