本文共 4685 字,大约阅读时间需要 15 分钟。
Objective-C 中实现 INI 文件的读写功能
在 Objective-C 中,处理 INI 文件的读写可以通过创建一个简单的类来实现。INI 文件通常包含键值对和节(sections),这些文件采用文本格式存储。以下是一个完整的示例,展示了如何实现读取和写入 INI 文件的功能。
创建 INI 文件处理类
首先,我们创建一个名为 INIFile 的类,继承自 NSObject。这个类将负责解析和存储 INI 文件的内容。具体实现如下:
#import@interface INIFile : NSObject@property (nonatomic, strong) NSMutableDictionary *contents;@end
实现 INI 文件解析
为了读取 INI 文件,我们需要实现解析方法。以下是解析文件的主要步骤:
读取 INI 文件的实现代码如下:
- (void)readFromFile:(NSString *)fileName { self.contents = [NSMutableDictionary new]; NSFileHandle *fileHandle = [NSFileHandle fileHandleWithName:fileName]; if (!fileHandle) { NSLog(@"无法打开 INI 文件:%s", fileName); return; } NSInputStream *inputStream = [fileHandle inputStreamForReading]; if (!inputStream) { NSLog(@"无法获取 INI 文件的输入流"); return; } while (!inputStream.atEndOfStream) { NSString *line = [inputStream lineOfData]; if (!line) { continue; } // 忽略注释行 if ([line rangeOfCharacterFromStart:@";"].location != NSNotFound) { continue; } // 分隔节和键值对 if ([line rangeOfCharacterFromStart:@"["].location != NSNotFound) { // 处理节名称 } else { // 处理键值对 } }} 实现 INI 文件写入
写入 INI 文件的实现相对简单,主要步骤包括:
写入 INI 文件的实现代码如下:
- (void)writeToFile:(NSString *)fileName { NSFileHandle *fileHandle = [NSFileHandle fileHandleWithName:fileName]; if (!fileHandle) { NSLog(@"无法打开 INI 文件:%s", fileName); return; } NSOutputStream *outputStream = [fileHandle outputStreamToWrite]; if (!outputStream) { NSLog(@"无法获取 INI 文件的输出流"); return; } // 写入内容 [self writeContentsToOutputStream:outputStream]; // 确保文件被写入 if (![outputStream synchronizeStreamByCountingBytes]) { NSLog(@"未能成功写入 INI 文件"); } [outputStream close];} 完整实现
为了让您能够直接使用,我们提供一个完整的实现代码:
#import@interface INIFile : NSObject@property (nonatomic, strong) NSMutableDictionary *contents;@end@implementation INIFile- (void)readFromFile:(NSString *)fileName { self.contents = [NSMutableDictionary new]; NSFileHandle *fileHandle = [NSFileHandle fileHandleWithName:fileName]; if (!fileHandle) { NSLog(@"无法打开 INI 文件:%s", fileName); return; } NSInputStream *inputStream = [fileHandle inputStreamForReading]; if (!inputStream) { NSLog(@"无法获取 INI 文件的输入流"); return; } while (!inputStream.atEndOfStream) { NSString *line = [inputStream lineOfData]; if (!line) { continue; } // 忽略注释行 if ([line rangeOfCharacterFromStart:@";"].location != NSNotFound) { continue; } // 分隔节和键值对 if ([line rangeOfCharacterFromStart:@"["].location != NSNotFound) { // 处理节名称 NSString *sectionName = [line substringFromStart:line.rangeOfCharacterFromStart:@"["].length]; // 例:[section] -> section // 可以进一步处理 sectionName } else { // 处理键值对 NSArray *pairs = [line componentsSeparatedByString:]=[line componentsSeparatedByString:@":"]; if ([pairs count] == 2) { NSString *key = [pairs[0] TrimmingCharactersInStrings]; NSString *value = [pairs[1] TrimmingCharactersInStrings]; // 添加到 contents 字典中 [self.contents setValue:value forKey:key]; } } }}- (void)writeToFile:(NSString *)fileName { NSFileHandle *fileHandle = [NSFileHandle fileHandleWithName:fileName]; if (!fileHandle) { NSLog(@"无法打开 INI 文件:%s", fileName); return; } NSOutputStream *outputStream = [fileHandle outputStreamToWrite]; if (!outputStream) { NSLog(@"无法获取 INI 文件的输出流"); return; } // 写入内容 [self writeContentsToOutputStream:outputStream]; // 确保文件被写入 if (![outputStream synchronizeStreamByCountingBytes]) { NSLog(@"未能成功写入 INI 文件"); } [outputStream close];}- (void)writeContentsToOutputStream:(NSOutputStream *)outputStream { [self.contents enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *isStopped) { NSString *line = [NSString stringWithFormat:@"%@=%@", key, value]; [outputStream write:line]; [outputStream write:@"\n"]; }]; // 写入最后一行换行 [outputStream write:@"\n"];}
使用说明
通过以上实现,您可以轻松地在 Objective-C 中读取和写入 INI 文件,灵活处理文件内容。
转载地址:http://zcsfk.baihongyu.com/