iOS开发-文件操作

Posted CUG

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发-文件操作相关的知识,希望对你有一定的参考价值。

                 目录操作和文件管理

 

学习目标

1.理解单例

2.掌握NSFileManager类常用的文件管理操

3.掌握NSFileHandle类常用的文件数据操作

4.了解NSData类的常用操作

5.掌握Plist文件读写

——————————————————————

通常程序在运行中或者程序结束之后,需要保存一些信息,而且需要持久化存储信息,比如登陆信息、视频播放记录、收藏记录等等,那么我们可以采用以下几种方式对数据进行持久化保存.

 

1.1单例模式(当前对象有且仅有一个实例)

                 

好处:只有一个实例,数据共享。

                  

单例模式是一种常用的设计模式。在应用这个模式时,

单例对象的类必须保证只有一个实例存在,而且自行实例化并向整个

系统提供这个实例。如果希望在系统中某个类的对象只能存在一个,

单例模式是最好的解决方案。

 

其实单例类似C语言中的全局变量

在整个程序声明周期内,该对象只有一份存在内存中

可以在多个对象之间共享数据。

 

 

 

<1>单例创建

(1)  单例的创建方法通常以default/shared/standard 等等开头

 

 

(2) 单例不需要release 或者 autorelease ,因为单例的生命周期为整个程序。

 

 

2.方法:

2.1 NSFileManager

<1>创建文件管理器单例对象

 

[NSFileManager defaultManager]

 

<2>遍历目录下的内容

//浅度遍历当前目录下的文件

/*

         contentsOfDirectoryAtPath:要遍历的路径

         error:错误信息

         */

NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];

 

//深度遍历

 array = [fileManger subpathsOfDirectoryAtPath:path error:nil];

 

<3>判断文件是否存在

/*

         判断文件是否存在的时候一定要加后缀。

                      path中如果有后缀表示文件,不加后缀表示文件夹。

         */

        BOOL isExist = [fileManger fileExistsAtPath:path];

        

        if (isExist)

        {

            NSLog(@"存在");

        }

        else

        {

            NSLog(@"不存在");

        }

 

<4>创建文件和目录

//创建文件

  /*

         createFileAtPath:要创建文件的路径

         contents:文件内容(NSData类型)

         attributes:文件属性,一般为nil,nil表示采用默认属性。

         */

        //注意:如果文件已经存在会覆盖

        BOOL createOK = [fileManger createFileAtPath:path contents:nil attributes:nil];

 

 

//创建目录

/*

         createDirectoryAtPath:要创建的目录,如果文件夹已经存在不会覆盖

         withIntermediateDirectories:是否有中间目录

         attributes:文件夹的属性,nil表示默认属性

         error:错误信息

         */

        createOK = [fileManger createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error];

 

 

<5>拷贝文件/目录

                  //目录与目录拷贝

        [fileManger copyItemAtPath:fromFilePath toPath:toDirPath error:&error];

 

        //文件与文件拷贝

        [fileManger copyItemAtPath:fromFilePath toPath:toFilePath error:&error];

 

<6>移动文件/目录

        [fileManger moveItemAtPath:frompath toPath:toPath error:nil];

 

<7>删除文件/目录

                    [fileManger removeItemAtPath:toPath error:nil];

 

<8>获取文件属性

       NSDictionary *attributes = [fileManger attributesOfItemAtPath:path error:nil];

       NSLog(@"文件的属性:%@",attributes);

 

 

 

 

2.2 NSData(二进制数据)

<1>把NSString转换为NSData

NSData *data = [string dataUsingEncoding:

NSUTF8StringEncoding]

 

       

<2>把NSData转换为NSString

NSString *convertString = [[NSString alloc] 

initWithData:data encoding:NSUTF8StringEncoding]

 

 

2.3 NSFileHandle(文件句柄类)

对文件进行读写首先需要NSFileHandle打开文件,

NSFileHandle对文件进行读写都是NSData类型的二进制数据.

 

<1>打开文件方法

//只读的句柄

        NSFileHandle *readOnlyHandle = [NSFileHandle fileHandleForReadingAtPath:path];

        //只写的句柄

        NSFileHandle *writeOnlyHandle  = [NSFileHandle fileHandleForWritingAtPath:path];

        //读写句柄

        NSFileHandle *readAndWriteHandle = [NSFileHandle fileHandleForUpdatingAtPath:path];

           

 

<2>读指定长度的数据(单位为字节)

  //读取5个字节数据

NSData *data = [readOnlyHandle readDataOfLength:5];

                   

 

<3>从当前偏移量读到文件尾

[readOnlyHandle readDataToEndOfFile]

[readAndWriteHandle readDataToEndOfFile]

 

 

<4>设置文件偏移量(单位为字节)

[readOnlyHandle seekToFileOffset:偏移的字节数];

 

 

<5>将文件偏移量定位到文件尾

[readOnlyHandle seekToEndOfFile];

                       

 

<6>写文件(不覆盖的时候需要设置偏移量)

          //1.先把偏移量指到文件尾部

[readAndWriteHandle seekToEndOfFile];

          //2.写入到指定路径

[readAndWriteHandle writeData:[@"abcdef" dataUsingEncoding:NSUTF8StringEncoding]];

          

 

<7>关闭文件句柄

         //关闭文件句柄,关闭后(不需要)就不能再操作文件了

[readAndWriteHandle closeFile];

[readOnlyHandle closeFile];

[writeOnlyHandle closeFile];

 

 

 

 

 

 

 

 

 

 

3  Plist

<1> 什么是plist文件, plist文件的作用

    1.plist文件:property list  属性列表文件,文件的内容只能是 NSString,NSNumber,NSDate,NSData,NSArray,NSDictionary类的对象内容,不能保存其他类型数据

 

2.作用:对一些登陆注册信息或者程序的配置信息(小数据)进行持久化存储

 

<2> 如何创建plist文件, 如何编辑plist文件

Plist文件内容的格式是XML语法格式

 

1.Xcode创建

1.点击右键—>New File 弹出一对话框

2.ios程序选中iOS栏中的Resource或者Mac程序选中OS X 栏中的resource 

3.点击Resource中的Property List 创建plist文件

4.点击文件中的‘+‘可以添加数据

 

2.代码创建

如果要把 NSString NSNumber NSDate NSData NSArray NSDictionary 的对象写入文件一般就用plist文件  

我们需要这些数据保存到一个数组或者字典中,然后调用数组和字典的相关函数把数 组NSArray或者字典NSDictionary写入plist文件

//NSArray和NSDictionary写文件方法

- (BOOL)writeToFile:(NSString *)path atomically:

(BOOL)useAuxiliaryFile;

 

<3> 如何在程序中读取plist文件数据

Plist文件的根节点(数据的最外层)通常是数组或者字典

如果Plist文件的根节点是字典那么使用字典的类方法

+ (id)dictionaryWithContentsOfFile:(NSString *)path;

读写Plist文件

如果根节点是数组那么使用数组的类方法

+ (id)arrayWithContentsOfFile:(NSString *)path;

读取Plist文件。

注:上述两个方法只能读取Plist文件,不能读取其他格式的文件。

 

以上是关于iOS开发-文件操作的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发CGRectGetMidX. CGRectGetMidY.CGRectGetMinY. CGRectGetMaxY. CGRectGetMinX. CGRectGetMaxX的使用(代码片段

如何使用 Swift 使用此代码片段为 iOS 应用程序初始化 SDK?

iOS开发CGRectGetMidX. CGRectGetMidY.CGRectGetMinY. CGRectGetMaxY. CGRectGetMinX. CGRectGetMaxX的使用(代码片段

iOS代码片段CodeSnippets

iOS 相当于 Android 片段/布局

VSCode自定义代码片段——.vue文件的模板