iOS 文件读写 (一)
2023-09-14 08:57:28 时间
Document:一般需要持久的数据都放在此目录中,可以在当中添加子文件夹,iTunes备份和恢复的时候,会包括此目录。
NSArray *paths = NSSearchPathDorDirectoriesInDomains(NSDocumentDicrectory,, NSUserDomainMark, YES); NSString *docPath = [paths lastObject]; 获取Library目录 NSArray *paths = NSSearchPathForDirectoriseInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *docPath = [paths lastObject]; 获取Library中的Cache NSArray *paths = NSSearchPathForDirectoriseInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *docPath = [paths lastObject]; 获取temp路径 NSString *temp = NSTemporaryDirectory( );
二、NSString类路径的处理方法 文件路径的处理 NSString *path = @"/Uesrs/apple/testfile.txt" 常用方法如下 获得组成此路径的各个组成部分,结果:("/","User","apple","testfile.txt")
- (NSArray *)pathComponents; 提取路径的最后一个组成部分,结果:testfile.txt - (NSString *)lastPathComponent;
删除路径的最后一个组成部分,结果:/Users/apple
- (NSString *)stringByDeletingLastPathCpmponent; 将path添加到先邮路径的末尾,结果:/Users/apple/testfile.txt/app.txt - (NSString *)stringByAppendingPathConmponent:(NSString *)str; 去路径最后部分的扩展名,结果:text - (NSString *)pathExtension; 删除路径最后部分的扩展名,结果:/Users/apple/testfile - (NSString *)stringByDeletingPathExtension; 路径最后部分追加扩展名,结果:/User/apple/testfile.txt.jpg - (NSString *)stringByAppendingPathExtension:(NSString *)str; 三、NSData
NSData存储的是二进制数据,屏蔽了数据之间的差异,文本、音频、图像等数据都可用NSData来存储
NSData- NSString NSString *aString = [[NSString alloc] initWithData:adataencoding:NSUTF8StringEncoding]; NSString- NSData NSString *aString = @"1234abcd";
NSData *aData = [aString dataUsingEncoding: NSUTF8StringEncoding];
将data类型的数据,转成UTF8的数据
+(NSString *)dataToUTF8String:(NSData *)data
{
NSString *buf = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
return [buf autorelease];
}
将string转换为指定编码
+(NSString *)changeDataToEncodinString:(NSData *)data encodin:(NSStringEncoding )encodin{
NSString *buf = [[[NSString alloc] initWithData:data encoding:encodin] autorelease];
return buf;
}
2. NSData 与 UIImage
NSData- UIImage
UIImage *aimage = [UIImage imageWithData: imageData];
//例:从本地文件沙盒中取图片并转换为NSData
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *name = [NSString stringWithFormat:@"ceshi.png"];
NSString *finalPath = [path stringByAppendingPathComponent:name];
NSData *imageData = [NSData dataWithContentsOfFile: finalPath];
UIImage *aimage = [UIImage imageWithData: imageData]; 3.NSData与NSArray NSDictionary +(NSString *)getLocalFilePath:(NSString *) fileName
{
return [NSString stringWithFormat:@"%@/%@%@", NSHomeDirectory(),@“Documents”,fileName];
} 包括将NSData写进Documents目录
从Documents目录读取数据
在进行网络数据通信的时候,经常会遇到NSData类型的数据。在该数据是dictionary结构的情况下,系统没有提供现成的转换成NSDictionary的方法,为此可以通过Category对NSDictionary进行扩展,以支持从NSData到NSDictionary的转换。声明和实现如下: + (NSDictionary *)dictionaryWithContentsOfData:(NSData *)data {
CFPropertyListRef list = CFPropertyListCreateFromXMLData(kCFAllocatorDefault, (CFDataRef)data, kCFPropertyListImmutable, NULL);
if(list == nil) return nil;
if ([(id)list isKindOfClass:[NSDictionary class]]) {
return [(NSDictionary *)list autorelease];
}
else {
CFRelease(list);
return nil;
}
} 四、文件管理常用方法 NSFileManager 创建一个文件并写入数据 - (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr; 从一个文件中读取数据 - (NSData *)contentsAtPath:(NSString *)path; scrPath路径上的文件移动到dstPath路径上,注意这里的路径是文件路径而不是目录 - (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **) error; scrPath路径上的文件复制到dstPath路径上 - (BOOL)copyItemAtPath:(NSString *)scrPath toPath:(NSString *)dstPath error:(NSError **) error;
比较两个文件的内容是否一样 - (BOOL)contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2; 文件时候存在 - (BOOL)fileExistsAtPath:(NSString *)path; 移除文件 - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **) error;
创建文件管理 NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *path = [NSHomeDirectory( ) stringByAppendingPathComponent:@"holyBible.txt"]; NSString *text = @"abcdefg"; 将字符串转成NSData类型 NSData *data = [text dataUsingEncoding: NSUTF8StringEncoding]; 写入文件 BOOL success = [fileManager createFileAtPath:path contents:data attributes:nil];
创建文件夹
NSString *filePath = [path stringByAppendingPathComponent:@"holyBible.txt"]; NSString *contect = @"abcdefg"; BOOL success = [fm createFileAtPath:filePath contents:[content dataUsingEncoding: NSUTF8StringEncoding] attributes:nil];
NSFileManager-读取内容 NSData *fileData = [fileManager contentsAtPath:filePath]; NSString *content = [[NSString alloc] initWithData:fileData dataUsingEncoding: NSUTF8StringEncoding]; NSData-读取内容 NSString *filePath = [path stringByAppendingPathComponent:@"holyBible.txt"]; NSData *data = [NSData dataWithContentOfFile:filePath]; NSString-读取内容 NSString *filePath = [path stringByAppendingPathComponent:@"holyBible.txt"]; NSString *content = [[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; 移动、复制文件 移动文件(重命名) NSString *toPath = [NSHomeDirectory( ) stringByAppendingPathComponent:@"hellogod/New Testament.txt"]; [fm createDirectoryAtPath:[toPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil]; NSError *error; BOOL isSuccess = [fm moveItemAtPath:filePath toPath:toPath error: error]; 复制文件(重命名) NSString *copyPath = [NSHomeDirectory( ) stringByAppendingPathComponent:@"备份/Old Testament.txt"]; [fm createDirectoryAtPath:[toPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil]; BOOL success = [fm copyItemAtPath:toPath toPath:toPath error:nil]; 删除文件、获取文件大小
判断文件是否存在和删除文件 if([fm fileExistsAtPath]) { if ([fm removeItemAtPath:copyPath]) { NSLog(@"remove success"); } } 获取文件大小 NSFileManager *fileManager = [NSFileManager defaultManager]; 获得文件的属性字典 NSDictionary *attrDic = [fileManager attributesOfItemAtpath:sourcePath error:nil]; NSNumber *fileSize = [attrDic objectForKey:NSFileSize]; 获取目录文件信息 NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *enuPath = [NSHomeDirectoty( ) stringByAppendingPathComponent:@"Test"]; NSDictionaryEnumerator *dirEnum = [fileManager enumeratorAtPath:enuPath]; NSString *path = nil; while ((path = [dirEnum nextObject]} != nil) { NSLog(@"%@",path); } 五、Plist文件 String方式添加 NSString *path = [NSHomeDirectory( ) stringByAppendingPathComponent:@"Array.plist"]; NSString *content = @"abcd"; [contect writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil]; Array方式添加 NSString *path = [NSHomeDirectory( ) stringByAppendingPathComponent:@"Array.plist"]; [NSArray *array = [[NSArray alloc] initWithObjects:@"123", @"798",@"000",nil]; [array writeToFile:path atomically:YES]; Dictionary方式添加 NSString *path = [NSHomeDirectory( ) stringByAppendingPathComponent:@"Dic.plist"]; NSDictionary *dic = [NSDictionary alloc] initWithObjects:@"first",@"second",@"third"forKeys:@"123",@"456",@"798"]; [dic writeToFile:path atomically:YES];
数组、字典只能将BOOL、NSNumber、NSString、NSData、NSDate、NSArray、NSDictionary写入属性列表plist文件 六、读取文件类和常用方法
- (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; 关闭文件 向文件追加数据 NSString *homePath = NSHomeDirectory( ); NSString *sourcePath = [homePath stringByAppendingPathConmpone:@"testfile.text"]; NSFileHandle *fielHandle = [NSFileHandle fileHandleForUpdatingAtPath:sourcePath]; [fileHandle seekToEndOfFile]; 将节点跳到文件的末尾 NSString *str = @"追加的数据" NSData* stringData = [str dataUsingEncoding:NSUTF8StringEncoding]; [fileHandle writeData:stringData]; 追加写入数据 [fileHandle closeFile]; 定位数据 NSFileManager *fm = [NSFileManager defaultManager]; NSString *content = @"abcdef"; [fm createFileAtPath:path contents:[content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:path]; NSUInteger length = [fileHandle availabelData] length]; 获取数据长度 [fileHandle seekToFileOffset;length/2]; 偏移量文件的一半 NSData *data = [fileHandle readDataToEndOfFile]; [fileHandle closeFile]; 复制文件 NSFileHandle *infile, *outfile; 输入文件、输出文件 NSData *buffer; 读取的缓冲数据 NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *homePath = NSHomeDirectory( ); NSString *sourcePath = [homePath stringByAppendingPathComponent:@"testfile.txt"]; 源文件路径 NSString *outPath = [homePath stringByAppendingPathComponent:@"outfile.txt"]; 输出文件路径 BOOL sucess = [fileManager createFileAtPath:outPath contents:nil attributes:nil]; if (!success) { return N0; } infile = [NSFileHandle fileHandleForReadingAtPath:sourcePath]; 创建读取源路径文件 if (infile == nil) { return NO; } outfile = [NSFileHandle fileHandleForReadingAtPath:outPath]; 创建病打开要输出的文件 if (outfile == nil) { return NO; } [outfile truncateFileAtOffset:0]; 将输出文件的长度设为0 buffer = [infile readDataToEndOfFile]; 读取数据 [outfile writeData:buffer]; 写入输入 [infile closeFile]; 关闭写入、输入文件 [outfile closeFile];
iOS本地文件操作 文件操作在我们开发过程中或多或少都会遇到,我一般不会去记这些,每次使用的时候都要去查询下,有点麻烦,今天索性记录下,方便查找!
NSArray *paths = NSSearchPathDorDirectoriesInDomains(NSDocumentDicrectory,, NSUserDomainMark, YES); NSString *docPath = [paths lastObject]; 获取Library目录 NSArray *paths = NSSearchPathForDirectoriseInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *docPath = [paths lastObject]; 获取Library中的Cache NSArray *paths = NSSearchPathForDirectoriseInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *docPath = [paths lastObject]; 获取temp路径 NSString *temp = NSTemporaryDirectory( );
二、NSString类路径的处理方法 文件路径的处理 NSString *path = @"/Uesrs/apple/testfile.txt" 常用方法如下 获得组成此路径的各个组成部分,结果:("/","User","apple","testfile.txt")
- (NSArray *)pathComponents; 提取路径的最后一个组成部分,结果:testfile.txt - (NSString *)lastPathComponent;
删除路径的最后一个组成部分,结果:/Users/apple
- (NSString *)stringByDeletingLastPathCpmponent; 将path添加到先邮路径的末尾,结果:/Users/apple/testfile.txt/app.txt - (NSString *)stringByAppendingPathConmponent:(NSString *)str; 去路径最后部分的扩展名,结果:text - (NSString *)pathExtension; 删除路径最后部分的扩展名,结果:/Users/apple/testfile - (NSString *)stringByDeletingPathExtension; 路径最后部分追加扩展名,结果:/User/apple/testfile.txt.jpg - (NSString *)stringByAppendingPathExtension:(NSString *)str; 三、NSData
NSData存储的是二进制数据,屏蔽了数据之间的差异,文本、音频、图像等数据都可用NSData来存储
NSData- NSString NSString *aString = [[NSString alloc] initWithData:adataencoding:NSUTF8StringEncoding]; NSString- NSData NSString *aString = @"1234abcd";
NSData *aData = [aString dataUsingEncoding: NSUTF8StringEncoding];
将data类型的数据,转成UTF8的数据
+(NSString *)dataToUTF8String:(NSData *)data
{
NSString *buf = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
return [buf autorelease];
}
将string转换为指定编码
+(NSString *)changeDataToEncodinString:(NSData *)data encodin:(NSStringEncoding )encodin{
NSString *buf = [[[NSString alloc] initWithData:data encoding:encodin] autorelease];
return buf;
}
2. NSData 与 UIImage
NSData- UIImage
UIImage *aimage = [UIImage imageWithData: imageData];
//例:从本地文件沙盒中取图片并转换为NSData
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *name = [NSString stringWithFormat:@"ceshi.png"];
NSString *finalPath = [path stringByAppendingPathComponent:name];
NSData *imageData = [NSData dataWithContentsOfFile: finalPath];
UIImage *aimage = [UIImage imageWithData: imageData]; 3.NSData与NSArray NSDictionary +(NSString *)getLocalFilePath:(NSString *) fileName
{
return [NSString stringWithFormat:@"%@/%@%@", NSHomeDirectory(),@“Documents”,fileName];
} 包括将NSData写进Documents目录
从Documents目录读取数据
在进行网络数据通信的时候,经常会遇到NSData类型的数据。在该数据是dictionary结构的情况下,系统没有提供现成的转换成NSDictionary的方法,为此可以通过Category对NSDictionary进行扩展,以支持从NSData到NSDictionary的转换。声明和实现如下: + (NSDictionary *)dictionaryWithContentsOfData:(NSData *)data {
CFPropertyListRef list = CFPropertyListCreateFromXMLData(kCFAllocatorDefault, (CFDataRef)data, kCFPropertyListImmutable, NULL);
if(list == nil) return nil;
if ([(id)list isKindOfClass:[NSDictionary class]]) {
return [(NSDictionary *)list autorelease];
}
else {
CFRelease(list);
return nil;
}
} 四、文件管理常用方法 NSFileManager 创建一个文件并写入数据 - (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr; 从一个文件中读取数据 - (NSData *)contentsAtPath:(NSString *)path; scrPath路径上的文件移动到dstPath路径上,注意这里的路径是文件路径而不是目录 - (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **) error; scrPath路径上的文件复制到dstPath路径上 - (BOOL)copyItemAtPath:(NSString *)scrPath toPath:(NSString *)dstPath error:(NSError **) error;
比较两个文件的内容是否一样 - (BOOL)contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2; 文件时候存在 - (BOOL)fileExistsAtPath:(NSString *)path; 移除文件 - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **) error;
创建文件管理 NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *path = [NSHomeDirectory( ) stringByAppendingPathComponent:@"holyBible.txt"]; NSString *text = @"abcdefg"; 将字符串转成NSData类型 NSData *data = [text dataUsingEncoding: NSUTF8StringEncoding]; 写入文件 BOOL success = [fileManager createFileAtPath:path contents:data attributes:nil];
创建文件夹
NSString *filePath = [path stringByAppendingPathComponent:@"holyBible.txt"]; NSString *contect = @"abcdefg"; BOOL success = [fm createFileAtPath:filePath contents:[content dataUsingEncoding: NSUTF8StringEncoding] attributes:nil];
NSFileManager-读取内容 NSData *fileData = [fileManager contentsAtPath:filePath]; NSString *content = [[NSString alloc] initWithData:fileData dataUsingEncoding: NSUTF8StringEncoding]; NSData-读取内容 NSString *filePath = [path stringByAppendingPathComponent:@"holyBible.txt"]; NSData *data = [NSData dataWithContentOfFile:filePath]; NSString-读取内容 NSString *filePath = [path stringByAppendingPathComponent:@"holyBible.txt"]; NSString *content = [[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; 移动、复制文件 移动文件(重命名) NSString *toPath = [NSHomeDirectory( ) stringByAppendingPathComponent:@"hellogod/New Testament.txt"]; [fm createDirectoryAtPath:[toPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil]; NSError *error; BOOL isSuccess = [fm moveItemAtPath:filePath toPath:toPath error: error]; 复制文件(重命名) NSString *copyPath = [NSHomeDirectory( ) stringByAppendingPathComponent:@"备份/Old Testament.txt"]; [fm createDirectoryAtPath:[toPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil]; BOOL success = [fm copyItemAtPath:toPath toPath:toPath error:nil]; 删除文件、获取文件大小
判断文件是否存在和删除文件 if([fm fileExistsAtPath]) { if ([fm removeItemAtPath:copyPath]) { NSLog(@"remove success"); } } 获取文件大小 NSFileManager *fileManager = [NSFileManager defaultManager]; 获得文件的属性字典 NSDictionary *attrDic = [fileManager attributesOfItemAtpath:sourcePath error:nil]; NSNumber *fileSize = [attrDic objectForKey:NSFileSize]; 获取目录文件信息 NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *enuPath = [NSHomeDirectoty( ) stringByAppendingPathComponent:@"Test"]; NSDictionaryEnumerator *dirEnum = [fileManager enumeratorAtPath:enuPath]; NSString *path = nil; while ((path = [dirEnum nextObject]} != nil) { NSLog(@"%@",path); } 五、Plist文件 String方式添加 NSString *path = [NSHomeDirectory( ) stringByAppendingPathComponent:@"Array.plist"]; NSString *content = @"abcd"; [contect writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil]; Array方式添加 NSString *path = [NSHomeDirectory( ) stringByAppendingPathComponent:@"Array.plist"]; [NSArray *array = [[NSArray alloc] initWithObjects:@"123", @"798",@"000",nil]; [array writeToFile:path atomically:YES]; Dictionary方式添加 NSString *path = [NSHomeDirectory( ) stringByAppendingPathComponent:@"Dic.plist"]; NSDictionary *dic = [NSDictionary alloc] initWithObjects:@"first",@"second",@"third"forKeys:@"123",@"456",@"798"]; [dic writeToFile:path atomically:YES];
数组、字典只能将BOOL、NSNumber、NSString、NSData、NSDate、NSArray、NSDictionary写入属性列表plist文件 六、读取文件类和常用方法
- (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; 关闭文件 向文件追加数据 NSString *homePath = NSHomeDirectory( ); NSString *sourcePath = [homePath stringByAppendingPathConmpone:@"testfile.text"]; NSFileHandle *fielHandle = [NSFileHandle fileHandleForUpdatingAtPath:sourcePath]; [fileHandle seekToEndOfFile]; 将节点跳到文件的末尾 NSString *str = @"追加的数据" NSData* stringData = [str dataUsingEncoding:NSUTF8StringEncoding]; [fileHandle writeData:stringData]; 追加写入数据 [fileHandle closeFile]; 定位数据 NSFileManager *fm = [NSFileManager defaultManager]; NSString *content = @"abcdef"; [fm createFileAtPath:path contents:[content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:path]; NSUInteger length = [fileHandle availabelData] length]; 获取数据长度 [fileHandle seekToFileOffset;length/2]; 偏移量文件的一半 NSData *data = [fileHandle readDataToEndOfFile]; [fileHandle closeFile]; 复制文件 NSFileHandle *infile, *outfile; 输入文件、输出文件 NSData *buffer; 读取的缓冲数据 NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *homePath = NSHomeDirectory( ); NSString *sourcePath = [homePath stringByAppendingPathComponent:@"testfile.txt"]; 源文件路径 NSString *outPath = [homePath stringByAppendingPathComponent:@"outfile.txt"]; 输出文件路径 BOOL sucess = [fileManager createFileAtPath:outPath contents:nil attributes:nil]; if (!success) { return N0; } infile = [NSFileHandle fileHandleForReadingAtPath:sourcePath]; 创建读取源路径文件 if (infile == nil) { return NO; } outfile = [NSFileHandle fileHandleForReadingAtPath:outPath]; 创建病打开要输出的文件 if (outfile == nil) { return NO; } [outfile truncateFileAtOffset:0]; 将输出文件的长度设为0 buffer = [infile readDataToEndOfFile]; 读取数据 [outfile writeData:buffer]; 写入输入 [infile closeFile]; 关闭写入、输入文件 [outfile closeFile];
iOS本地文件操作 文件操作在我们开发过程中或多或少都会遇到,我一般不会去记这些,每次使用的时候都要去查询下,有点麻烦,今天索性记录下,方便查找!
相关文章
- 上级向的诗歌IOS面试问题
- Unity iOS打开AppStore评星页面,浅谈Application.OpenURL()方法。
- iOS开发之网络编程--3、NSURLSessionDataTask实现文件下载(离线断点续传下载)
- iOS开发之网络编程--小文件下载
- iOS 不要用宏来定义你的常量
- iOS开发 - 文件压缩与解压缩
- iOS之多控制器管理--项目中的常见文件
- iOS开发UI篇—常见的项目文件介绍
- iOS宏(自己使用,持续更新)
- ios开发,app调用资源文件到C++的方法
- iOS中 流媒体播放和下载
- 在苹果iOS平台中获取当前程序进程的进程名等信息
- ios 面试技巧个人总结
- ios swift 读取项目里的文件 读取并解析本地json文件 codable