[Objective-C] 013_文件系统(File System)
在前面三篇关于数据持久化,我们都用涉及到文件(plist文件,数据库文件),它们都是把它们存储在document目录下。iOS的文件机制是沙盒机制,应用只能访问自己应用目录下的文件。iOS应用产生的内容,如图像、文件、缓存内容等都必须存储在自己的沙盒内。默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。Library包含Caches、Preferences目录。
Documents:苹果建议将程序创建产生的文件以及应用浏览产生的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
Library:存储程序的默认设置或其它状态信息;
Library/Caches:存放缓存文件,保存应用的持久化数据,用于应用升级或者应用关闭后的数据保存,不会被itunes同步,所以为了减少同步的时间,可以考虑将一些比较大的文件而又不需要备份的文件放到这个目录下。
tmp:提供一个即时创建临时文件的地方,但不需要持久化,在应用关闭后,该目录下的数据将删除,也可能系统在程序不运行的时候清除。
我们实际中要如何来或取沙盒,如何在沙盒里面进行相应的操作,下面一一分解。
1.获取app的沙盒根目录
1 2 | NSString *appRootDir= NSHomeDirectory (); NSLog (@ "我的沙盒路径根路径------》: %@" ,appRootDir); |
2.获取Documents目录路径
1 2 3 4 5 6 7 8 9 10 | //第一种 NSString *appRootDir= NSHomeDirectory (); NSLog (@ "我的沙盒路径根路径------》: %@" ,appRootDir); NSString *documentDir = [appRootDir stringByAppendingPathComponent:@ "Documents" ]; NSLog (@ "documentDir: -----》 %@" ,documentDir); //第二种 NSArray *paths = NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory , NSUserDomainMask , YES ); NSString *documentsDirectory = [paths objectAtIndex:0]; NSLog (@ "documentsDirectory: -----》 %@" ,documentsDirectory); |
3.获取Library(包含Caches、Preferences)目录路径:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | //第一种 NSString *appRootDir= NSHomeDirectory (); NSLog (@ "我的沙盒路径根路径------》: %@" ,appRootDir); NSString *documentDir = [appRootDir stringByAppendingPathComponent:@ "Library" ]; NSLog (@ "documentDir: -----》 %@" ,documentDir); //第二种 NSArray *paths = NSSearchPathForDirectoriesInDomains ( NSLibraryDirectory , NSUserDomainMask , YES ); NSString *libraryDirectory = [paths objectAtIndex:0]; NSLog (@ "libraryDirectory: -----》 %@" ,libraryDirectory); //Caches NSString *cachesPath = [libraryDirectory stringByAppendingString:@ "Caches" ]; //Preferences NSString *preferencesPath = [libraryDirectory stringByAppendingString:@ "Preferences" ]; NSLog (@ "cachesPath: -----》 %@" ,cachesPath); NSLog (@ "preferencesPath: -----》 %@" ,preferencesPath); |
4.获取tmp目录路径:
1 2 3 4 5 6 7 8 9 | //第一种 NSString *appRootDir= NSHomeDirectory (); NSLog (@ "我的沙盒路径根路径------》: %@" ,appRootDir); NSString *documentDir = [appRootDir stringByAppendingPathComponent:@ "tmp" ]; NSLog (@ "documentDir: -----》 %@" ,documentDir); //第二种 NSString *tmpDirectory = NSTemporaryDirectory (); NSLog (@ "tmpDirectory: -----》 %@" ,tmpDirectory); |
5.创建文件(tmp文件夹中)
1 2 3 4 5 6 7 8 9 10 11 | NSString *tmpDirectory = NSTemporaryDirectory (); NSLog (@ "tmpDirectory: -----》 %@" ,tmpDirectory); NSFileManager *fileManager = [ NSFileManager defaultManager]; NSString *testFilePath = [tmpDirectory stringByAppendingPathComponent:@ "testFile.txt" ]; BOOL res=[fileManager createFileAtPath:testFilePath contents: nil attributes: nil ]; if (res) { NSLog (@ "测试文件创建成功: %@" ,testFilePath); } else { NSLog (@ "测试文件创建失败" ); } |
6.创建文件夹
1 2 3 4 5 6 7 8 9 | NSFileManager *fileManager = [ NSFileManager defaultManager]; NSString *testFolderDirectory = [documentsPath stringByAppendingPathComponent:@ "Test" ]; // 创建目录 BOOL res=[fileManager createDirectoryAtPath:testFolderDirectory withIntermediateDirectories: YES attributes: nil error: nil ]; if (res) { NSLog (@ "Test文件夹创建成功" ); } else { NSLog (@ "Test文件夹创建失败" ); } |
7.删除文件
1 2 3 4 5 6 7 8 9 10 11 12 | NSString *tmpDirectory = NSTemporaryDirectory (); NSFileManager *fileManager = [ NSFileManager defaultManager]; NSString *testFilePath = [tmpDirectory stringByAppendingPathComponent:@ "testFile.txt" ]; //判断文件是否存在 if ([fileManager fileExistsAtPath:testFilePath]) { BOOL res=[fileManager removeItemAtPath:testFilePath error: nil ]; if (res) { NSLog (@ "testFile文件删除成功" ); } else NSLog (@ "testFile文件删除失败" ); } |
8.写入文件
1 2 3 4 5 6 7 8 9 10 11 | NSString *tmpDirectory = NSTemporaryDirectory (); NSLog (@ "tmpDirectory: -----》 %@" ,tmpDirectory); NSString *content=@ "www.babybus.com SuperDo" ; NSString *testFilePath = [tmpDirectory stringByAppendingPathComponent:@ "testFile.txt" ]; BOOL res=[content writeToFile:testFilePath atomically: YES encoding: NSUTF8StringEncoding error: nil ]; if (res) { NSLog (@ "testFile文件写入成功" ); } else { NSLog (@ "testFile文件写入失败" ); } |
以上是iOS 文件的一些简单常见操作。更多详细内容请参考(https://developer.apple.com/library/ios/#documentation/FileManagement/Conceptual/FileSystemProgrammingGUide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW2)
本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 )
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4659923.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!