在项目中我们经常有针对二进制或者文本文件进行局部读写、追加数据等需求。在C语言里用fopen
系列函数就能解决。而在Swift
语言里可以通过FileHandle
来处理。
下面通过代码示例来讲解下FileHandle
的用法。
首先先定义一个文件路径,作为测试文件
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + "test.txt"
接下来判断文件是否存在,不存在就创建。
注意:由于FileHandle
的创建要求文件必须存在,这和C语言的fopen
不同,C语言的fopen
可以负责在文件不存在时创建,而FileHandle
不行。
if !FileManager.default.fileExists(atPath: path) {
FileManager.default.createFile(atPath: path, contents: nil, attributes: nil)
}
接下来,我们创建一个FileHandle
。
let fileHandle = FileHandle(forWritingAtPath: path)!
简化起见我这里用“!
强制类型为非空,实际开发中请用if
分支,不再赘述。
将文件指针移动到文件末尾。
fileHandle.seekToEndOfFile()
进入写入数据的阶段,我这里写入字符串hello, world!
fileHandle.write("hello, world!".data(using: .utf8)!)
最后,记得要关闭文件。
try? fileHandle.close()
文件关闭后,读一下现在文件里的数据并且打印出来。
if let content = try? String(contentsOfFile: path, encoding: .utf8) {
print(content)
}
如果是首次运行,打印结果是hello, world!
,如果再次运行,结果会变成hello, world!hello, world!
,依此类推。
完整代码示例:
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + "test.txt"
if !FileManager.default.fileExists(atPath: path) {
FileManager.default.createFile(atPath: path, contents: nil, attributes: nil)
}
let fileHandle = FileHandle(forWritingAtPath: path)!
fileHandle.seekToEndOfFile()
fileHandle.write("hello, world!".data(using: .utf8)!)
try? fileHandle.close()
if let content = try? String(contentsOfFile: path, encoding: .utf8) {
print(content)
}
其它分享:
移动开发者的小伙伴们可以加我的公众号风海铜锣的加群菜单栏中申请加群完成加群申请,一起共同进步。
网友评论