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];//判断当前字符串对象中是否包含有oldWordif ([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.可读可写

 

转载于:https://www.cnblogs.com/BeyondAverage0908/p/4597424.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(1520):vue-router嵌套路由

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title></head> <!-- 1引入…

python与sql连接不上_Python连接不上SQL Server的两种根治思路

连接不上数据库&#xff0c;首先可以排除是代码的问题&#xff0c;连接方式都是千篇一律的。大多数问题都是本机的两个原因造成的&#xff0c;1.服务没有开启,2.没有启动SQL配置的TCP/IP下面给出统一解决方案&#xff1a;首先从开始菜单找到SQL数据库的配置工具&#xff0c;比如…

Bootstrap系列 -- 23. 图片

图像在网页制作中也是常要用到的元素&#xff0c;在Bootstrap框架中对于图像的样式风格提供以下几种风格&#xff1a; 1、img-responsive&#xff1a;响应式图片&#xff0c;主要针对于响应式设计  2、img-rounded&#xff1a;圆角图片  3、img-circle&#xff1a;圆形图片…

python多进程和多线程一起使用_Python:多进程和多线程

在现实社会&#xff0c;我们经常需要一种场景&#xff0c;就是同时有多个事情需要执行&#xff0c;如在浏览网页的同时需要听音乐。比如说在跳舞的时候要唱歌。同样的&#xff0c;在程序中我们也可能需要这种场景。如下面我们以同时听音乐和浏览网页为例。def network():while …

Java多线程异常处理

在java多线程程序中&#xff0c;所有线程都不允许抛出未捕获的checked exception&#xff0c;也就是说各个线程需要自己把自己的checked exception处理掉。这一点是通过java.lang.Runnable.run()方法声明(因为此方法声明上没有throws exception部分)进行了约束。但是线程依然有…

python字典怎么换行_Python字典如何换行

原标题&#xff1a;Python字典如何换行Python字典换行的方法如下&#xff1a;1、换行时保证行尾是逗号即可a {"key0": "val0","key1": "val1","key2": "val2"}2、在长度不影响阅读的情况下这种写法也是允许的&am…

回复《我要阻止做java开发的男朋友去创业型公司工作吗?》园友问题

真的非常开心能收到这么多园友的关心&#xff0c;看到这么多的回复顿感身边处处充满爱。也非常感谢大家踊跃的帮我出谋划策&#xff0c;小女子在此有礼了&#xff01; 我先来回答一下性别的问题&#xff08;前面已经暴露了……&#xff09;&#xff0c;我是前端程序媛。大三时和…

java date转sql date_java.util.Date和java.sql.Date转换(转)

Date 的类型转换&#xff1a;首先记住java.util.Date 为 java.sql.Date的父类1.将java.util.Date 转换为 java.sql.Datejava.lang.ClassCastException: java.util.Date cannot be cast to java.sql.DateDate dnew Date(); //java.util.Datenew java.sql.Date(d.getTime()) //…

Kaggle Bike Sharing Demand Prediction – How I got in top 5 percentile of participants?

Kaggle Bike Sharing Demand Prediction – How I got in top 5 percentile of participants? Introduction There are three types of people who take part in a Kaggle Competition: Type 1: Who are experts in machine learning and their motivation is to compete with…

java 组合对象_Java 中组合模型之对象结构模式的详解

Java 中组合模型之对象结构模式的详解一、意图将对象组合成树形结构以表示”部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。二、适用性你想表示对象的部分-整体层次结构你希望用户忽略组合对象与单个对象的不同&#xff0c;用户将统一使用组…

前端学习(1525):简化模板代码

app.vue <template><div id"app"></div> </template><script> export default {name: app,data () {return {}} } </script><style>运行结果

6月26号.NET面试题(程序题部分)只要做懂这3道题肯定能脱离菜鸟称号!

说明&#xff1a;1、如果只是想知道正确答案&#xff0c;拷贝代码到vs中运行就行了 2、这3道题我不会做&#xff0c;求指点&#xff08;只需要告诉我考察的知识点就行了~&#xff09; 1、下面的代码有什么错误吗&#xff0c;如果有如何改正&#xff1f;&#xff08;我感觉没错呀…

Java学习笔记2、环境变量配置与初学者常见错误

2.1 环境变量的配置2.1.1 path环境变量配置的作用程序的执行需要使用外部指令javac&#xff0c;但是javac指令仅仅能在JDK安装目录下的bin目录下运行&#xff0c;因此程序只能写入bin目录程序开发过程中&#xff0c;不能将源代码写入JDK的安装目录&#xff0c;因此需要将源程序…

go语言代码连接mysql_【mysql】golang连接mysql操作示例增删改查

golang本身没有提供连接mysql的驱动&#xff0c;但是定义了标准接口供第三方开发驱动。这里连接mysql可以使用第三方库&#xff0c;第三方库推荐使用https://github.com/Go-SQL-Driver/MySQL这个驱动&#xff0c;更新维护都比较好。下面演示下具体的使用&#xff0c;完整代码示…