粗糙的iOS笔记之文件操作

精确读写文件的时候用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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值