iOS关于操作本地文件详解

ios 本地存储(1)本地文件读写 ios 本地存储有一下几种方式: 通过字符串、NSData,以及数组存储的方式写入,还有一种形式是NSUserdefault对plist文件的存储。 首先,我们来实现一下这几种方法: 第一步,我们要首先寻找到Documents路径: 我们给类里面的每一个方法都声明成类方法,调用简单: + (NSString *)finddocumentpath{ //寻找documents路径 阅读详情

最近公司要做APP的统计,这就需要将APP中的统计数据记录到本地文件中,最后统一上传,下面就是关于本地文件的增删改查的一些操作的详解。

首先,要知道iOS沙盒模型存放文件的文件夹Documents,temp,Library,Application。

1 . Documents 目录:所有的应用程序数据文件写入到这个目录下,这个目录用于存储用户数据或其他应该定期备份的信息。

2 . Application - Name 目录:这事应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以在运行时不能对这个目录的内容进行修改,否则可能会使应用程序无法启动。

3 . Library 目录:这个目录下面有两个子目录:Caches 和 Preferences
Preferences 目录:包含应用程序的偏好设置文件。不应该直接创建偏好设置文件,而是应该使用NSUserDefault类来取得和设置应用程序的偏好。
Caches 目录:用于存放应用程序临时文件,保存应用程序再次启动过程中不需要的信息,如NSUserDefaults中保存的信息。


获取这些目录路径的方法:

1、获取家目录路径的函数:
NSString *homeDir = NSHomeDirectory();
2、获取Documents目录路径的方法:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
3、获取Caches目录路径的方法:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:0];
4、获取tmp目录路径的方法:
NSString *tmpDir = NSTemporaryDirectory();


主要的操作是在Documents里面的相关文件的操作:

1、在Docunments里面创建一个文件夹路径

NSString *path = [NSString stringWithFormat:@"%@/%@/",docDir,@"Ver"];

在Ver文件夹里面写文件路径

NSString *txtPath = [path stringByAppendingPathComponent:@"version.txt"];

写入文件内容

NSString *verContent = @"abc";
 NSFileManager *verfileManager = [[NSFileManager alloc]init];
 if (![verfileManager fileExistsAtPath:txtPath]) {
       //路径存在与否
        if (![verfileManager fileExistsAtPath:path]) {
           //文件夹路径存在与否
            [verfileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
        }
        NSData *txtData = [verContent dataUsingEncoding:NSUTF8StringEncoding];
        [verfileManager createFileAtPath:txtPath contents:txtData attributes:nil];
}

2、读取文件内容

NSData *txtCon = [NSData dataWithContentsOfFile:txtPath];
NSString *dataStr = [[NSString alloc]initWithData:txtCon encoding:NSUTF8StringEncoding];

3、拷贝文件

NSError* error=nil;
  [verfileManager copyItemAtPath:riginFile toPath:themepath error:&error];
// 两个path均是文件的路径,不是文件夹的路径;并且同样路径的(相同的文件名称)不会复制成功,所以要原来的文件,将新文件添加进来。

移除: - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **) error;

4、比较文件内容

- (BOOL)contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2;

NSString类路径的处理方法

文件路径的处理

NSString *path = @"/Uesrs/apple/testfile.txt"
  • 常用方法如下

获得组成此路径的各个组成部分,结果:(”/”,”User”,”apple”,”testfile.txt”)

- (NSArray *)pathComponents;

提取路径的最后一个组成部分,结果:testfile.txt

- (NSString *)lastPathComponent;

删除路径的最后一个组成部分,结果:/Users/apple

- (NSString *)stringByDeletingLastPathCpmponent;

将path添加到先前路径的末尾,结果:/Users/apple/testfile.txt/app.txt

- (NSString *)stringByAppendingPathConmponent:(NSString *)str;

去路径最后部分的扩展名,结果:text

- (NSString *)pathExtension;

删除路径最后部分的扩展名,结果:/Users/apple/testfile

- (NSString *)stringByDeletingPathExtension;

路径最后部分追加扩展名,结果:/User/apple/testfile.txt.jpg

 - (NSString *)stringByAppendingPathExtension:(NSString *)str;
  • 移动文件(重命名)
NSString *toPath = [NSHomeDirectory( ) stringByAppendingPathComponent:@"hellogod/New Testament.txt"];                                                                              

[fm createDirectoryAtPath:[toPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil];                                                   

NSError *error;                                                                                            

BOOL isSuccess = [fm moveItemAtPath:filePath toPath:toPath error:&error];
  • 复制文件(重命名)
NSString *copyPath = [NSHomeDirectory( ) stringByAppendingPathComponent:@"备份/Old Testament.txt"];                                                                                  

[fm createDirectoryAtPath:[toPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil];                                                  

BOOL success = [fm copyItemAtPath:toPath toPath:toPath error:nil];
  • 删除文件、获取文件大小
  • 判断文件是否存在和删除文件
if([fm fileExistsAtPath])                                                                                     

{                                                                                                                   

  if ([fm removeItemAtPath:copyPath])                                                               

     {                                                                                                                  

        NSLog(@"remove success");                                                                       

     }                                                                                                                

}
  • 获取文件大小
NSFileManager *fileManager = [NSFileManager defaultManager];                         

获得文件的属性字典                                                                                         

NSDictionary *attrDic = [fileManager attributesOfItemAtpath:sourcePath error:nil];  

NSNumber *fileSize = [attrDic objectForKey:NSFileSize];  
  • 获取目录文件信息
NSFileManager *fileManager = [NSFileManager defaultManager];                         

NSString *enuPath = [NSHomeDirectoty( ) stringByAppendingPathComponent:@"Test"];   

NSDictionaryEnumerator *dirEnum = [fileManager enumeratorAtPath:enuPath];     

NSString *path = nil;                                                                                      

while ((path = [dirEnum nextObject]} != nil)                                                       

 {                                                                        
       NSLog(@"%@",path);                                                                          
 }

下面这些内容是关于在已经创建好的文件将特定的字符串写入到其中,追加而不是覆盖,直接上代码!

- (void)writefile:(NSString *)string
{
    NSArray *paths  = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *homePath = [paths objectAtIndex:0];

    NSString *filePath = [homePath stringByAppendingPathComponent:@"testfile.text"];

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if(![fileManager fileExistsAtPath:filePath]) //如果不存在
    {
        NSString *str = @"姓  名/手  机  号/邮  件";
        [str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];

    }

    NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath];

    [fileHandle seekToEndOfFile];  //将节点跳到文件的末尾

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSString *datestr = [dateFormatter stringFromDate:[NSDate date]];

    NSString *str = [NSString stringWithFormat:@"\n%@\n%@",datestr,string];

    NSData* stringData  = [str dataUsingEncoding:NSUTF8StringEncoding];

    [fileHandle writeData:stringData]; //追加写入数据

    [fileHandle closeFile];
}

这里写图片描述


总结

读取文件类和常用方法:

NSFileHandle类主要对文件内容进行读取和写入操作
NSFileManager类主要对文件的操作(删除、修改、移动、复制等等)

常用处理方法:

+ (id)fileHandleForReadingAtPath:(NSString *)path  //打开一个文件准备读取     

+ (id)fileHandleForWritingAtPath:(NSString *)path  //打开一个文件准备写入   

+ (id)fileHandleForUpdatingAtPath:(NSString *)path  //打开一个文件准备更新  

-  (NSData *)availableData; //从设备或通道返回可用的数据            

-  (NSData *)readDataToEndOfFile; //从当前的节点读取到文件的末尾               

-  (NSData *)readDataOfLength:(NSUInteger)length; //从当前节点开始读取指定的长度数据                           

-  (void)writeData:(NSData *)data; //写入数据  

-  (unsigned long long)offsetInFile;  //获取当前文件的偏移量            

-  (void)seekToFileOffset:(unsigned long long)offset; //跳到指定文件的偏移量     

-  (unsigned long long)seekToEndOfFile; //跳到文件末尾        

-  (void)truncateFileAtOffset:(unsigned long long)offset; //将文件的长度设为offset字节

-  (void)closeFile;  关闭文件

【iOS】 基于Fastbot-iOS的Monkey测试操作指引详解 6.执行 pingTestNetwork(此处可参照步骤3-2),此时在手机上点击 FastbotRunner-Runner App,弹出黑色界面后,等待 30s 左右,点击 Home键回到桌面,此时弹出是否打开网络权限的弹窗,选择无线网络或蜂窝网即可。5.执行 pingTestNetwork,待 FastbotRunner 安装成功后, 然后在手机 设置-通用-描述文件与设备管理-开发者应用中信任 FastbotRunner的证书。3.通过Xcode 打开项目Fastbo-iOS项目。 阅读详情

相关推荐

一文搞定3D卷积

在讨论卷积核的时候,是不把channel维加进去的 核 = 一个可以滑动的窗口 窗口内不同位置数据之间的权值共享 3D卷积,卷积核会在3个方向上运动,那么卷积核的运动需要有三个自由度(一小块立方体,在一个大面包块内3个方向上滑动 2D卷积,卷积核只在2个方向上运动,因此只有两个自由度(一小片纸,在一大张纸内2个方向上滑动 1D卷积,卷积核只在1个方向上运动,因此只有一个自由度(一条滑窗,在一大长线上1个方向上滑动 一个卷积核运算一次 得到一个输出值 以上讨论了单个卷积核,接下来考虑多通道,一个卷积核对应一

njuptalex的博客 3万+

iOS开发:浏览本地文件+iCloud配置

浏览iPhone本地文件,选择文件,并计算文件大小

wuwuFQ的博客 2456

使用PLINK做GWAS(2)

利用PLINK对单基因控制的性状进行定位,之前一篇文章粗滤的记录了一下使用PLINK的命令,本次博客主要记录一下如何根据SNP芯片的数据制作PLINK的格式,以及分析的步骤,最后数据的可视化。 首先,有的公司给的新片的数据就是一个excel表格,列表示的是样品,行表示的是基因型,基因型用ATCG构成,当然有的基因型是用数字0或者1表示的。下面我拿到的一个数据是15个样品构成的基因型,有13个样品是突变体,2个样品是野生型。 格式如下: 第二步:将此基因型存成csv文件,使用R进行读取,在R中制作pl

samhuairen的专栏 2921

ios本地文件读取方法详解

ios读去本地文件ios文件目录介绍ios读取各种文件路径方法使用案例 ios文件目录介绍 Document: 这个目录主要用于存储用户数据或其它定期备份儿的信息 AppName.app: 这是应用程序的包目录,包含应用程序本身。由于应用程序必须经过签名,所以您在运行是不能对这个目录中的内容就行修改,否则程序将无法启动。 Library: 这个目录下有两个目录:Caches和Preference...

的博客 6830

pcle接口详解&用途说明

它原来的名称为“3GIO”,由英特尔在2001年提出。pcel x16插槽 用途用于显卡、RAID阵列卡,向下兼容PCIE x1/x4/x8/x16。(PCIE x16插槽长89mm,有164根针脚,靠主板外侧端有一卡口,将16x分为前后两组,短插槽有22根针脚,主要用于供电,长插槽142根,主要用于数据传输,具有16通道所带来的高带宽)PCI-E x8插槽插槽用途:全长56mm,有98根针脚,与PCI-E x16比较,主要是数据针脚减少至76根,短的供电针脚仍然是22针脚。

qq_43289307的博客 1万+

在 MATLAB/Simulink 中构建一个固定地面站天线指向控制系统的完整仿真模型

在卫星通信系统中,地面站天线负责与在轨卫星建立高增益、高稳定性的通信链路。对于固定地面站(如卫星测控站、深空站、VSAT主站),天线必须具备高精度指向能力,以确保波束始终对准卫星。然而,卫星(尤其是低轨卫星)在天空中快速移动,地面站天线必须实时跟踪其轨迹。此外,环境扰动(风载、热变形、机械误差)也会导致指向偏差。因此,设计一个高精度、高鲁棒性的天线指向控制系统(Antenna Pointing Control System)至关重要。本文将手把手教你如何在中构建一个固定地面站天线指向控制系统。

amy_mhd的博客 133

iOS8文档选择器(Document Picker)深度解析

在iOS开发中,应用间文档共享一直是个难题。iOS8引入的统一文档选择器(UIDocumentPickerViewController)彻底改变了这一局面,为开发者提供了标准化的文档共享解决方案。本文将深入剖析这一功能的核心机制与最佳实践。 ## 文档选择器概述 文档选择器是UIKit框架新增的视图控制器,主要功能包括: 1. 提供统一的UI界面让用户选择文件 2. 支持多种操作模式 3.

gitblog_00555的博客 650

利用AWVS进行反制

awvs 10.5下载 http://www.32r.com/soft/12986.html

渗透之路,攻防之间皆学问 6653

基于Swift的iOS应用程序开发:以Base64字符串形式上传文件——从iOS选择文件并上传

简述 在常规的web开发过程中,大部分上传文件都是在web页面端通过表单直接提交,再由服务器端捕获请求来进行处理的。但是在前后端分离趋于一种流行趋势,再加上Android和iOS开发技术日渐成熟,大部分团队都会选择在服务器端仅提供一套通用的webservice数据接口,而web页面、Android和iOS统一都通过这套数据接口来向服务器发送请求和获取数据。 在这一过程中,大部分的webse

女儿控老徐的专栏 1705

【雕爷学编程】Arduino动手做(111)---震动提醒模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

雕爷学编程 1898

windows使用jupyter notebook读取文件路径的几种方法和设置默认打开路径

简单分享小虎这段时间以来学到的jupyter notebook操作技巧。

狂小虎/Anthony Dave的博客 KuangXiaoHu's Blogs 1万+

uni-app: Android、iOS文件选择

uni-app移动端(Android、iOS)文件选择

Heyuan_Xie的博客 1967

Cursor自动生成测试用例

或者把你已有的规则直接复制粘贴到这个文档内(这里我用的是Markdown格式和CSV格式的测试用例生成规则,可以同时生成Markdown和CSV格式的测试用例)。在AI对话框这里,我们可以看到Cursor会逐步来帮我们生成测试用例,先分析识别需求文档,然后生成测试用例,最后会进行质量检查,确保生成的用例符合规范。生成的Markdown格式,可直接导入Xmind,生成思维导图,对应到具体的功能模块看具体的测试点,逻辑会更直观一些。(1)选中规则文档和需求文档:@你的测试用例规则文档@你的需求文档。

十二测试录 2432

[ios]ios读写文件本地数据

参考:http://blog.youkuaiyun.com/tianyitianyi1/article/details/7713103 ios - Write写入方式:永久保存在磁盘中。具体方法为:第一步:获得文件即将保存的路径: NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUse...

weixin_30307267的博客 103

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

iOS客户端开启FTP,其他设备访问手机本地文件操作实现

iOS客户端开启FTP,其他设备访问手机本地文件操作实现 因为项目需要,需要在手机端搭建FTP服务,让其他设备来访问手机某个路径文件夹下边的文件,实现下载功能。 主要实现借助第三方库XMFTPServer, 原来文件有修改,实现带用户名、密码访问连接FTP。 首先封装FTPManager,便于其他地方使用 .h 文件部分代码 #import "XMFTPServer.h" @interface FTPManager : NSObject /** * 服务器ftpServer; */ @prope

fengdebeiyingzi的博客 4963

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

iOS WKWebView加载本地文件之权威解说

  在实际的iOS开发中,我们有很多的地方需要通过WKWebView加载本地的文件。但是由于WKWebview存在着一些跨域的问题。UIWebView直接加载的方法不能正常使用了。这里就和大家分享一下常见的几种处理方法。 GCDWebServer启动本地服务器加载   就是在本地启动一个本地服务器,可以使用GCDWebServer这个库,大家感兴趣的话可以看看。GCDWebServer介绍的文章(...

1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

iOS开发:通过UIWebView加载读取本地文件(word文档)

做过iOS开发的程序猿,对UIWebView都不陌生,因为只要涉及到开发工作,就一定会涉及到这方面的运用。UIWebView是苹果自带的框架,也算是苹果程序内部的浏览器,可以浏览web网页,也可以打开HTML/HTM、PDF、docx、txt等格式的文本文件,其实苹果自带的浏览器Safari就是用UIWebView来实现的,具体原理简单的说就是服务器将MIME的标识符等放入传送的数据中,然后告诉浏...

qq_41597968的博客 1670

iOS删除本地文件

// 文件存放目录 NSString *pngDir = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"]; NSFileManager *fileMgr = [NSFileManagerdefaultManager]; NSString *FileD

小乔的博客 7068

ios上传本地文件到GitHub

https://www.jianshu.com/p/28bd66d8e2a0 ios上传本地文件到GitHub

weixin_45945866的博客 333

iphone app开发中读取本地文件与归档数据到本地文件

读取本地文件: //从文件中调取用户信息         NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);         NSString *documentsDirectory = [paths objectAtIndex:0];

799

iOS 用本地文件保存自定义模型

iOS 用本地文件保存自定义模型  标签: 自定义模型文件存储iosNSKeyedArchiver 2016-08-18 13:59 2163人阅读 评论(0) 收藏 举报  分类: iOS(44)  版权声明:本文为博主原创文章,未经博主允许不得转载。 iOS中,保存数据有四种方法,归档、文件、NSUserDefaults和sqli

wakice的博客 1224

IOS --- 读取本地文件

#import "BIDDirectoryViewController.h" @interface BIDDirectoryViewController () @property(nonatomic,retain)UIBarButtonItem *upload; @end @implementation BIDDirectoryViewController - (id)ini

zyjing_love的专栏 7714

iOS读写本地文件

#import "RootViewController.h" @interface RootViewController () @end @implementation RootViewController - (void)viewDidLoad {     [super viewDidLoad];    //获取沙盒的根路径    NSLog(@"%@",NSHomeDirect

qianrushixudong的博客 642

ios 字符串,字典,数组存储到本地文件

字符串,数组,字典存储到本地文件过程一样,只是要存储的数据类型不同而已,这里以字符串存储到本地文件为例,如下 NSString*content =@"将字符串存储到本地文件" ; (1)获取Documents 文件夹路径 参数:(1)指定文件夹,(2)设置查找域,(3)是否使用详细路径    NSString*documentsPath = [NSSearchPathForDi

博客 5706

iOS 删除本地文件的方法

// 文件存放目录             NSString *pngDir = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"];             NSFileManager *fileMgr = [NSFileManagerdefaultManager];             NSSt

scodefarmery的博客 1238
上一篇: iOS获取设备唯一标识符
Levilly
博客等级 码龄10年 6粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值