精确读写文件的时候用NSFileHandle
<span style="white-space: pre;"> </span>NSString * path = @"/Users/apple/Documents/iOS Core";
// 1. 拼出 子文件夹/子文件 路径 -> 帮你补 /
// 进入 2_View
// /Users/apple/Documents/iOS Core/2_Views
NSLog(@"%@", [path stringByAppendingPathComponent:@"2_Views"]);
// 2. 拆分一个路径的component
NSArray * components = [path pathComponents];
[components enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%@", obj);
}];
// /Users/apple/Documents/iOS Core
// -> day20/Demo1_NSString/Demo1_NSString/main.m
NSString * path1 = @"/Users/apple/Documents/iOS Core";
// path1 = [path1 stringByAppendingPathComponent:@"day20"];
// path1 = [path1 stringByAppendingPathComponent:@"Demo1_NSString"];
// path1 = [path1 stringByAppendingPathComponent:@"Demo1_NSString"];
// path1 = [path1 stringByAppendingPathComponent:@"main.m"];
path1 = [path1 stringByAppendingPathComponent:@"day20/Demo1_NSString/Demo1_NSString/main.m"];
NSLog(@"path1: %@", path1);
// 3. 追加文件后缀 -> 帮你补 .
NSString * path2 = @"/User/apple/Desktop";
// Elephant.jpg
path2 = [path2 stringByAppendingPathComponent:@"Elephant"];
path2 = [path2 stringByAppendingPathExtension:@"jpg"];
NSLog(@"path2: %@", path2);
// 4. 获取文件后缀 用于判断文件类型(简单)
NSString * extension = [path2 pathExtension];
NSLog(@"extension: %@", extension);
// 5. 获取文件名/文件夹名
NSString * component = [path2 lastPathComponent];
NSLog(@"%@", component);
// 6. 获取父目录 cd ..
NSString * path3 = [path2 stringByDeletingLastPathComponent];
NSLog(@"%@", path3);
// 7. 标准化
NSString * path4 = @"./haha";
NSLog(@"%@", [path4 stringByStandardizingPath]);
NSFileManager * fileManager = [NSFileManager defaultManager];
NSString * path = @"/Users/apple/Desktop";
// 1. 检查 文件/文件夹 是否存在
if([fileManager fileExistsAtPath:path]){
NSLog(@"文件存在");
}
// 2. 检查 文件/文件夹 是否存在的同时 检查目标是否为文件夹
BOOL isFolder = NO;
if([fileManager fileExistsAtPath:path isDirectory:&isFolder]){
NSLog(@"文件存在");
if (isFolder) {
NSLog(@"而且是文件夹");
}
}
// 消息的返回值 是文件是否存在
// 第二个指针参数所指向的局部变量 会被执行后修改 用于标记是否是文件夹
// 自己的代码
// isFolder 1122 [1]
// file.....消息内部
// BOOL *
// isDirectory 1724 [1122]
// *isDirectory = YES
//
// 3. 创建文件夹
// withIntermediateDirectories 是否顺便创建中间没有创建的文件夹
NSString * path1 = @"/Users/apple/Desktop";
path1 = [path1 stringByAppendingPathComponent:@"myFolder/myFolder/myFolder/myFolder/myFolder/myFolder/myFolder/myFolder/myFolder/myFolder/myFolder"];
[fileManager createDirectoryAtPath:path1
withIntermediateDirectories:YES
attributes:nil
error:nil];
/*
/Users/apple/Documents/iOS Core/
3_Model_and_Storage/day20/Demo2_FileManager/
QQ/users/
10086
images
cache
download
history
10010
images
cache
download
history
10000
images
cache
download
history
*/
NSString * rootPath = @"/Users/apple/Documents/iOS Core/3_Model_and_Storage/day20/Demo2_FileManager";
NSString * usersFolder = @"QQ/users";
NSArray * users = @[@"10086", @"10010", @"10000"];
NSArray * folders = @[@"images",@"cache",@"download",@"history"];
NSString * usersPath = [rootPath stringByAppendingPathComponent:usersFolder];
for (NSString * user in users) {
for (NSString * folder in folders) {
NSString * folderPath = nil;
folderPath = [usersPath stringByAppendingPathComponent:user];
folderPath = [folderPath stringByAppendingPathComponent:folder];
[fileManager createDirectoryAtPath:folderPath
withIntermediateDirectories:YES
attributes:nil
error:nil];
}
}
// 4. 遍历文件夹下的 子文件夹/子文件
NSString * path2 = @"/Users/apple/Desktop";
NSArray * arr = [fileManager contentsOfDirectoryAtPath:path2
error:nil];
for (NSString * str in arr) {
NSLog(@"%@", str);
//1 所有图片的路径 .jpg .png
//2 所有的子文件夹的名字
}
// 沙箱
// 获取沙箱的根路径
NSString * homePath = NSHomeDirectory();
NSLog(@"%@", homePath);
// 1. 获取文档路径(正规)
NSFileManager * fileManager = [NSFileManager defaultManager];
NSArray * urls =
[fileManager URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask];
NSURL * documentUrl = urls[0];
NSString * documentPath = [documentUrl path];
NSLog(@"文档 %@", documentPath);
// 获取文档路径(不正规)
NSLog(@"%@", [homePath stringByAppendingPathComponent:@"Documents"]);
// 2. 获取缓存目录
NSString * cachePath =
[[[fileManager URLsForDirectory:NSCachesDirectory
inDomains:NSUserDomainMask]
objectAtIndex:0]
path];
NSLog(@"%@", cachePath);
// 3. 获取临时目录
NSLog(@"%@", NSTemporaryDirectory());
// 数据的 解析
<pre code_snippet_id="207802" snippet_file_name="blog_20140227_5_7743464" class="objc" name="code">// 字符串 <- 对象 (人工)
TRPerson * person1 = [[TRPerson alloc] init];
person1.name = @"小秘";
person1.male = NO;
person1.age = 2;
NSString * data1 =
[NSString stringWithFormat:@"%@|%@|%ld",
person1.name, person1.male ? @"M" : @"F", person1.age];
NSLog(@"%@", data1);
// 字符串 -> 对象 (人工解析)
NSString * data = @"三丧|M|4";
NSArray * items = [data componentsSeparatedByString:@"|"];
TRPerson * person = [[TRPerson alloc] init];
person.name = items[0];
person.male = [items[1] isEqualToString:@"M"];
person.age = [items[2] integerValue];
//文件 -> 字符串
NSString * path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/person.txt"];
NSString * data =
[NSString stringWithContentsOfFile:path
encoding:NSUTF8StringEncoding
error:nil];
NSArray * lines = [data componentsSeparatedByString:@"\n"];
NSMutableArray * people = [NSMutableArray array];
for (NSString * line in lines) {
// 字符串 -> 对象 (人工解析)
// NSString * data = @"三毛|M|4";
NSArray * items = [line componentsSeparatedByString:@"|"];
TRPerson * person = [[TRPerson alloc] init];
person.name = items[0];
person.male = [items[1] isEqualToString:@"M"];
person.age = [items[2] integerValue];
[people addObject:person];
}
for (TRPerson * person in people) {
}
<pre code_snippet_id="207802" snippet_file_name="blog_20140227_6_8931943" class="objc" name="code">// NSFileHandle 读写文件
- (void)viewDidLoad
{
[super viewDidLoad];
NSString * homePath = NSHomeDirectory();
NSLog(@"%@", homePath);
NSString * documentPath =
[homePath stringByAppendingPathComponent:@"Documents"];
NSString * fileName = @"hello.txt";
NSString * filePath =
[documentPath stringByAppendingPathComponent:fileName];
NSString * str = @"你好";
// 直达 NSString -> 文件
// 完整 NSString -> NSData -> 文件
// NSString -> NSData
NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
// NSData -> 文件
// 1. 前期准备
// 1.1 创建空文件 准备
NSFileManager * fileManager = [NSFileManager defaultManager];
[fileManager createFileAtPath:filePath
contents:nil
attributes:nil];
// 1.2 创建文件对接器
NSFileHandle * writingHandle =
[NSFileHandle fileHandleForWritingAtPath:filePath];
// 2. 传输数据
[writingHandle writeData:data];
// 3. 关闭对接器
[writingHandle closeFile];
// 直达 文件 -> NSString
// 完整 文件 -> NSData -> NSString
// 文件 -> NSData
// 1. 前期准备
NSFileHandle * readingHandle =
[NSFileHandle fileHandleForReadingAtPath:filePath];
// 2. 传输数据
NSData * data1 = [readingHandle readDataToEndOfFile];
// 3. 关闭文件对接器
[readingHandle closeFile];
// NSData -> NSString
NSString * str1 =
[[NSString alloc] initWithData:data1
encoding:NSUTF8StringEncoding];
NSLog(@"%@", str1);
// 识别编码
NSStringEncoding encoding;
NSString * str2 =
[NSString stringWithContentsOfFile:filePath
usedEncoding:&encoding
error:nil];
if (encoding == NSUTF8StringEncoding) {
//...
}
}
</pre><br /><br /><p>给大家推荐一个swift视频教程,后续会不断更新,下载文件需要验证多次,有点耐心哦!</p><p><a target=_blank target="_blank" href="http://www.400gb.com/file/68575211">从OC转移到swift:环境与变量</a><br /></p><p><a target=_blank target="_blank" href="http://www.400gb.com/file/68478822">swift进阶可能值</a><br /></p><p><a target=_blank target="_blank" href="http://www.400gb.com/file/68478567">swift枚举扩展泛型</a><br /></p><p><a target=_blank target="_blank" href="http://www.400gb.com/file/68477438">类初始化属性方法</a><br /></p><p><a target=_blank target="_blank" href="http://www.400gb.com/file/68477021">元组闭包</a><br /></p><p><a target=_blank target="_blank" href="http://www.400gb.com/file/68476769">变量字符串集合循环</a></p><br /><p></p>