您的位置:首页 > 其它

OC-NSFileManager和NSFileHandle的使用

2015-06-24 13:10 393 查看
对于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.可读可写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: