zoukankan      html  css  js  c++  java
  • 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文件,不能读取其他格式的文件。

  • 相关阅读:
    【特别推荐】12款最佳的网站速度和性能测试工具
    Skeljs – 用于构建响应式网站的前端开发框架
    EpicEditor – 可嵌入的 JavaScript Markdown 编辑器
    12个学习 CSS3 网站布局设计的优秀案例
    15套流行的扁平化设计的界面素材【免费下载】
    JavaScriptOO.com – 快速找到你需要的 JS 框架
    15款最好的 jQuery Modal(模态窗口)插件
    开眼了!20个极具创意的移动界面动画效果
    ShareDrop – 苹果 AirDrop 服务的 HTML5 实现
    Furatto – 轻量,友好的响应式前端开发框架
  • 原文地址:https://www.cnblogs.com/fcug/p/6286506.html
Copyright © 2011-2022 走看看