在ios中,要进行文件读写,一般要经历以下几个步骤:
- 读取文件
- 获得文件目录
- 读取文件
- 写文件
- 获得文件目录
- 创建文件目录
- 写文件
下面详细介绍下每个步骤:
1、了解ios程序的目录布局
在ios中,每一个应用程序都有以下几个目录:
- 程序包目录
- application bundle程序包,主要存放程序要用到的图片,文本以及其他资源
- 文档目录
- 这个目录你可以用来存储各种文件
- 系统目录
- 这个目录下有一个Preference目录,你可以使用Preference API来读写文件从Preference目录;可以保存一些配置信息
- 临时目录
- 主要用于保存一些临时文件
2、获得各种目录的方法
- 应用程序总目录
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
- 程序包目录
- NSString* tempPath = [[NSBundle mainBundle] resourcePath];
- 系统目录
- 该目录不可以直接读写,需要通过调用NSUserDefaults来完成读写
- 临时目录
- NSString* tempPath = NSTemporaryDirectory();
1、获得文件的绝对路径
1、文档目录下的文件
NSString* documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
2、程序包下面的资源文件
这个有多种方法:
NSString *sourcePath = [[CCFileUtils sharedFileUtils] fullPathFromRelativePath:@"fileName.txt"];
NSString *sourcePath = [[CCFileUtils sharedFileUtils] fullPathForFilename:@"fileName.txt"];
NSString *sourcePath = [[NSBundlemainBundle]pathForResource:@"fileName.txt"ofType:nil];
NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"fileName" ofType:@".txt"];
NSString *sourcePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"fileName.txt" ];
NSString *sourcePath = [[CCFileUtils sharedFileUtils] fullPathFromRelativePath:@"fileName.txt"];
NSString *sourcePath = [[CCFileUtils sharedFileUtils] fullPathForFilename:@"fileName.txt"];
3、临时目录
NSString* tempFile = [tempPath stringByAppendingPathComponent:@"fileName.txt"];
2、读取文件
NSData *data = [fileManger contentsAtPath:myFilePath];//myFilePath是包含完整路径的文件名
或直接用NSData 的类方法:
NSData *data = [NSData dataWithContentOfPath:myFilePath];
3、保存文件
1、 NSFileManager
- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;
2、NSData
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToFile:(NSString *)path options:(NSUInteger)writeOptionsMask error:(NSError **)errorPtr;