zoukankan      html  css  js  c++  java
  • OC-NSFileManager和NSFileHandle的使用

    对于objective-c中的有关文件目录的操作和文件的操作。

    通过一道习题来熟悉NSFileManager和NSFileHandle中的方法的使用。

    本题原意:将指定目录下所有后缀名为XXX(可以自己输入)的文件中字符串为@"him"(可以自己输入)改为@"me"(可以自己输入)

    1.首先新建了一个文件解析类ReplaceStringInDirectory.h

    @interface ReplaceStringInDirectory : NSObject
    /**
     *  替换指定文件中指定的所有字符串为另一个字符串
     */
    + (void)replaceInDirectory:(NSString *)pathFile withOldString:(NSString *)oldString withNewString:(NSString *)newString;
    
    //替换指定目录下所有指定类型的文件中的字符串
    + (void)replaceInDirectory:(NSString *)pathDirectory withOldString:(NSString *)oldString withNewString:(NSString *)newString InType:(NSString *)typeFile;
    @end

    2.在对应的ReplaceStringInDirectory.m文件中实现.h文件中的两个方法

    /**
     *  替换指定文件中指定的所有字符串为另一个字符串
     */
    + (void)replaceInDirectory:(NSString *)pathFile withOldString:(NSString *)oldString withNewString:(NSString *)newString
    {
        //文件目录管理器 一个单例对象
        NSFileManager *fm = [NSFileManager defaultManager];
        //先备份一份文件在相同的路劲下,并以指定文件格式
        [fm copyItemAtPath:pathFile toPath:[pathFile stringByAppendingString:@"_bak"] error:nil];
        
        //创建文件句柄 文件指针 用以操作文件的内容
        NSFileHandle *fh = [NSFileHandle fileHandleForUpdatingAtPath:pathFile];
        //读取文件的信息
        NSData *data = [fh readDataToEndOfFile];  //这样会使的当前文件指针fh指向末尾
        NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        
        //判断当前字符串对象中是否包含有oldWord
        if ([dataString containsString:oldString]) {
            dataString = [dataString stringByReplacingOccurrencesOfString:oldString withString:newString];
        }
        
        //将文件清空,之后将字符串写回到文件中
        [fh truncateFileAtOffset:0];
        [fh writeData:[dataString dataUsingEncoding:NSUTF8StringEncoding]];
        
        //同步文件。  关闭线程锁
        [fh synchronizeFile];
        [fh closeFile];
    }
    
    
    //替换指定目录下所有指定类型的文件中的字符串
    + (void)replaceInDirectory:(NSString *)pathDirectory withOldString:(NSString *)oldString withNewString:(NSString *)newString InType:(NSString *)typeFile
    {
        NSFileManager *fm = [NSFileManager defaultManager];
        //深层次的遍历目录
        NSArray *arrayFile = [fm subpathsOfDirectoryAtPath:pathDirectory error:nil];
        
        for (NSString *item in arrayFile) {
            //获取文件的后缀名
            if ([typeFile isEqualToString:[item pathExtension]]) {
                [self replaceInDirectory:[pathDirectory stringByAppendingFormat:@"/%@",item] withOldString:oldString withNewString:newString];
            }
        }
    }

    需要注意是: NSFileManager *fm = [NSFileManager defaultManager];生成的对象是一个单例对象。

    //创建文件句柄 文件指针 用以操作文件的内容

    NSFileHandle *fh = [NSFileHandle fileHandleForUpdatingAtPath:pathFile];

    该对象是以可读可写的方式创建的,创建文件句柄(指针),有三种方式  1.只读   2.只写   3.可读可写

  • 相关阅读:
    51nod 1574 排列转换(猜结论)
    百度之星资格赛 1005 寻找母串(分块打表+组合数计算)
    百度之星资格赛 1004 度度熊的午饭时光(01背包+最小序号和+字典序+有bug)
    百度之星资格赛 1003 度度熊与邪恶大魔王(二维dp)
    HDU 4542 小明系列故事——未知剩余系 (数论|反素数)
    51nod 1060 最复杂的数(反素数)
    eclipse hadoop环境搭建 查看HDFS文件内容
    Windows jdk安装以及版本切换
    WIN10配置MongoDB
    Oracle 11g R2 for Win10(64位)的安装步骤
  • 原文地址:https://www.cnblogs.com/BeyondAverage0908/p/4597424.html
Copyright © 2011-2022 走看看