沙盒模式下的文件路径:
-(void)getSystemFilePath{
//沙盒所在的根目录
NSString *homeDirectory = NSHomeDirectory();
NSLog(@"path:%@", homeDirectory);
//应用程序路径
NSString*appPath = [[NSBundle mainBundle] resourcePath];
NSLog(@"path:%@", appPath);
//document目录
NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPaths = [docPaths objectAtIndex:0];
NSLog(@"path:%@", documentPaths);
//Cache目录
NSArray *cacPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [cacPaths objectAtIndex:0];
NSLog(@"%@", cachePath);
//获取Library目录
NSArray *libPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryPath = [libPaths objectAtIndex:0];
NSLog(@"%@", libraryPath);
//获取Tmp目录
NSString *tmpDir = NSTemporaryDirectory();
NSLog(@"%@", tmpDir);
}
运行结果:
homeDirectory:/Users/baihe
appPath:/Users/baihe/Library/Developer/Xcode/DerivedData/FileManage-bsjiooyzykamvnfrvtvuuejgiufb/Build/Products/Debug
documentPaths:/Users/baihe/Documents
cachePath:/Users/baihe/Library/Caches
libraryPath:/Users/baihe/Library
tmpDir:/var/folders/gg/cc6n2tms01j48j3l9g6sph100000gp/T/
文件的读取:
#pragma mark NSFileHandler和NSFileManager读取文件
-(void)readToFile{
NSFileManager *fm=[NSFileManager defaultManager];
//读取沙盒文件
NSArray *sorecePath= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath= [sorecePath objectAtIndex:0];
filePath=[filePath stringByAppendingPathComponent:@"text_list22.txt"];
NSLog(@"文件路径%@",filePath);
if ([fm fileExistsAtPath:filePath ]) {
NSLog(@"读取文件存在");
NSFileHandle *inFile=[NSFileHandle fileHandleForReadingAtPath:filePath];
//偏移量
// NSUInteger len=[[inFile availableData]length];
//
// [inFile seekToFileOffset:len/2];
NSData *readData=[inFile readDataToEndOfFile];
NSLog(@"readData=%@",[[NSString alloc]initWithData:readData encoding:NSUTF8StringEncoding]);
[inFile closeFile];
[self getSystemFilePath];
}else{
NSLog(@"读取文件不存在");
}
}
write文件
-(void)writeToFile{
NSFileManager* fm=[NSFileManager defaultManager];//文件进行的操作以及文件信息的获取
//查找文件
NSArray *directoryPaths= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//查询文件 0表示document下的文件
NSString *documentDirectory =[directoryPaths objectAtIndex:0];
//查找的文件名
NSString* fileName =[documentDirectory stringByAppendingPathComponent:@"text_list22.txt"];
NSLog(@"文件路径:%@",fileName);
if (![fm fileExistsAtPath:fileName]) {
NSLog(@"文件路径不存在:%@",fileName);
}else{
BOOL b=[fm createFileAtPath:fileName contents:nil attributes:nil];
if (b) {
NSLog(@"文件创建成功");
}else{
NSLog(@"文件创建失败");
}
}
NSFileHandle *outfile=[NSFileHandle fileHandleForWritingAtPath:fileName];//主要是对文件内容进行读取和写入操作
NSString *buffer=@"object-c";
[ outfile truncateFileAtOffset:0]; //将输出文件的长度设为0
// NSFileHandle *outfile=[NSFileHandle fileHandleForUpdatingAtPath:fileName];
// [outfile seekToEndOfFile];//将节点跳到文件的末尾
// NSString *buffer=@"中文";
[outfile writeData:[buffer dataUsingEncoding:NSUTF8StringEncoding]]; //写入输入
[outfile closeFile];
}
NSFileHandler常用方法:
+ (id)fileHandleForReadingAtPath:(NSString *)path 打开一个文件准备读取
+ (id)fileHandleForWritingAtPath:(NSString *)path 打开一个文件准备写入
+ (id)fileHandleForUpdatingAtPath:(NSString *)path 打开一个文件准备更新
- (NSData *)availableData; 从设备或通道返回可用的数据
- (NSData *)readDataToEndOfFile; 从当前的节点读取到文件的末尾
- (NSData *)readDataOfLength:(NSUInteger)length; 从当前节点开始读取指定的长度数据
- (void)writeData:(NSData *)data; 写入数据
- (unsigned long long)offsetInFile; 获取当前文件的偏移量
- (void)seekToFileOffset:(unsigned long long)offset; 跳到指定文件的偏移量
- (unsigned long long)seekToEndOfFile; 跳到文件末尾
- (void)truncateFileAtOffset:(unsigned long long)offset; 将文件的长度设为offset字节
- (void)closeFile; 关闭文件
NSFileManage常用方法
-(NSData *)contentsAtPath:path 从path所代表的文件中读取数据
-(BOOL)createFileAtPath:path contents:(BOOL)data attributes:attr 将数据写入文件
-(BOOL)removeFileAtPath:path handler:handler 将path所代表的文件删除
-(BOOL)movePath:from toPath:to handler:handler 移动或者重命名文件,to所代表的文件不能是已经存在的文件
-(BOOL)copyPath:from toPath:to handler:handler 复制文件,to所代表的文件不能是已经存在的文件
-(BOOL)contentsEqualAtPath:path1 andPath:path2 比较path1和path2所代表的文件
-(BOOL)fileExistsAtPath:path 检查path所代表的文件是否存在
-(BOOL)isReadableFileAtPath:path 检查path所代表的文件是否存在、是否可读
-(BOOL)isWritableFileAtPath:path 检查path所代表的文件是否存在、是否可写
-(NSDictionary *)fileAttributesAtPath:path traverseLink:(BOOL)flag 获取path所代表的文件属性
-(BOOL)changeFileAttributes:attr atPath:path 改变文件属性
//使用方法如下:
NSFileManager *fm=[NSFileManager defaultManager];
//读取沙盒文件
NSArray *sorecePath= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath= [sorecePath objectAtIndex:0];
filePath=[filePath stringByAppendingPathComponent:@"text_list22"];
[fm removeItemAtPath:filePath error:nil];//移除文件.
[fm createDirectoryAtPath:filePath withIntermediateDirectories:YES
attributes:nil error:nil];//创建文件夹
[fm createFileAtPath:[filePath stringByAppendingPathComponent:@"text_list22.txt"] contents:nil attributes:nil];//创建文件