zoukankan      html  css  js  c++  java
  • Object C学习笔记26-文件管理(二)

      一. 获取文件的执行主目录

        在Object C中提供了一个方法 NSHomeDirectory() 用于获得执行执行的主目录,使用如下代码测试:

    NSString *homePath=NSHomeDirectory();
    NSLog(@"执行文件的主目录:%@",homePath);

      通过以上代码可以正确的输出应用程序的执行目录,上一张也提到了文件的目录问题,这个和Windows系统的有些差别,在这个里面没有具体的盘符之分。

     二. 创建一个新文件

        在Object C中如何使用函数创建一个新文件,在自带的库中提供了相应的方法,createFileAtPath:(NSString*) contents:(NSString*) attributes:(NSDictionary *) 方法可以实现创建文件。

    NSString *newFilePath=[[NSString alloc] initWithFormat:@"/Users/用户名/1.txt"];
    NSFileManager *fileManager=[NSFileManager defaultManager];
    if([fileManager fileExistsAtPath:newFilePath]==NO){
        NSLog(@"文件不存在,接下来新建一个文件");
        [fileManager createFileAtPath:newFilePath contents:nil attributes:nil];
    }
    if([fileManager fileExistsAtPath:newFilePath]==YES){
        NSLog(@"新建文件已经成功");
    }

     三. 文件的读写

        在.NET中提供了一些文件读写的类,可以很方便的操作文件的IO读写.在Object C中也存在着一个类NSFileHandler可以很方便的读写文件和写入文件。文件的读写操作一般分为以下几个步骤:

         (1)创建一个NSFileHandler对象,打开文件

         (2)  对文件进行IO的读写操作

         (3)  关闭文件

        以上步骤和.NET中的基本类似,只是在类以及操作方法上不一样,下面的代码就是如何创建一个NSFileHandle类.

    NSFileHandle *fileHandler=[NSFileHandle fileHandleForReadingAtPath:newFilePath];
    if(fileHandler==nil){
        NSLog(@"文件不存在");
    }else{
        NSLog(@"文件存在");
    }
            
    fileHandler=[NSFileHandle fileHandleForWritingAtPath:newFilePath];
    if(fileHandler==nil){
        NSLog(@"文件不存在");
    }else{
        NSLog(@"文件存在");
    }

      以上提供了两个方法 fileHandleReadingAtPath 和 fileHandleWritingAtPath 用于获取NSFileHandle对象实例。但是以上两个方法适用于读取和写入文件的,如果文件路径不存在则返回nil.在上一章说道了创建一个新的文件,所以在这之前我们需要先创建该文件,并且在其中初始化一些内容:

    [fileManager createFileAtPath:newFilePath contents:@"dsadafdasdfasfdsa" attributes:nil];

      以上代码很熟悉,我们新建一个文件,并且在文件中写入一些内容。

      四. 文件的读写

        从上面可的记录中我们得到读写文件所用的方式不一样,现在我们做一个比较简单的例子: 将一个文件中的内容读取出来,然后写入到另外一个文件。但是这里我们要先确保文件是存在的。

        第一步:读取文件

    NSFileHandle *fileHandler=[NSFileHandle fileHandleForReadingAtPath:newFilePath];
    if(fileHandler==nil){
        NSLog(@"文件不存在");
    }else{
        NSLog(@"文件存在");
        NSData *buffer=[fileHandler readDataToEndOfFile];
    }

        我们使用fileHandleForReadingAtPath 打开一个文件,这个文件的路径为newFilePath,而且这个路径是肯定存在的,这个文件中有一些内容。下面有个方法readDataToEndOfFile 用于读取文件中的内容,得到一个NSData对象实例,这里的NSData 相当于byte字节数组一样[个人理解]。

        第二步:写入文件内容

    NSFileHandle *write=[NSFileHandle fileHandleForWritingAtPath:@"/Users/用户名/1.txt"]; 
    [write writeData:buffer]; 
    [write closeFile]; 
    [fileHandler closeFile];

        在根据fileHandleForWritingAtPath创建一个NSFileHandle 的对象实例,这个实例用于来写入文件内容. 我们将上面得到的NSData数据写入到文件中。提供了writeData方法用于写数据。操作完成之后要关闭文件。

        这里和.NET中的写文件有点区别,在.NET中有一个Flush的操作过程,用于刷新缓冲去,这里貌似没有这个操作。

       最后使用如下代码验证一下是否写入到新的文件,也当回顾一下这个方法:

    NSLog(@"%@",[NSString stringWithContentsOfFile:@"/Users/用户名/1.txt" encoding:NSUTF8StringEncoding error:nil]);

      可以正确的输出其内容,而且文件内容和原来的文件内容一致。

         

      五. 追加文件内容

        如果要像写入文件的时候不覆盖原有内容,我们必须设置文件的NSFileHandle的偏移量,如果是追加文件我们只需要偏移量移到最后即可。而设置文件操作偏移量使用方法seekToFileOffset 或者使用 seekToEndOfFile 将文件偏移量移到最后面。

    NSString *value=@"adsfasfasf4343434";
    NSData *data= [value dataUsingEncoding:NSUTF8StringEncoding];
    NSFileHandle *write=[NSFileHandle fileHandleForWritingAtPath:@"/Users/用户名/1.txt"]; 

    [write seekToEndOfFile];
    [write writeData:data];
    [write closeFile];

      通过以上代码我们可以将新的内容添加到文件fIle.txt的最末尾.如果要再中间插入一下内容,我们只需要设置偏移量。

    NSString *value=@"555555555555";
    NSData *data= [value dataUsingEncoding:NSUTF8StringEncoding];
    NSFileHandle *write=[NSFileHandle fileHandleForWritingAtPath:@"/Users/用户名/1.txt"]; 
    [write seekToFileOffset:
    3];
    [write writeData:data];
    [write closeFile];

      我们不将偏移量设置到最末尾即可。

  • 相关阅读:
    Construct Binary Tree from Preorder and Inorder Traversal leetcode java
    win7-X64用死性不改的系统安装锐起网吧无盘V4.5 Build 3535_64位客户端老不出物理映射盘的问题
    routeros ros M ikrotik 硬件产品命名规则
    CentOS下配置常用Tunnel隧道gre,ipip
    pptp隧道断了以后,重拨也不通的情况。新any可能出现的几个问题,包括T人下线的方法
    MariaDB(mysql)+daloRADIUS 导入数据库导入用户的方法
    centos策略路由-基于源地址的策略路由ip rule
    2019年逾期率上升_24家头部P2P平台最新运营数据解读:8家近一年逾期率走势曝光
    关于逾期率你所不知道的秘密
    Vintage_坏客户定义
  • 原文地址:https://www.cnblogs.com/jiuyi/p/10100610.html
Copyright © 2011-2022 走看看