day11---文件管理,目录操作,日期类

一.NSFileManager方法

define PATH @"/Users/qianfeng/Desktop/c语言全部资料"

    //获得当前主目录
    NSLog(@"%@",NSHomeDirectory());
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/c语言全部资料"];
    
    
    
    //创建文件管理对象(是一个单例对象)
    NSFileManager *fm = [NSFileManager defaultManager];
    
    
    //1.浅度遍历【常用】某个指定的目录(查看指定目录下的一级子目录或子文件)
    //第一个参数:所查看的目录所在的路径;
    //第二个参数:错误信息,NSError,通常情况下,写nil;
    NSError *error = nil;
    NSArray *array1 = [fm contentsOfDirectoryAtPath:path error:&error];
    NSLog(@"****error = %@",error);

// for (id xx in array1) {
// NSLog(@"%@",xx);
// }

    //2.深度遍历(可以遍历指定目录下的所有的子目录或子文件)
    NSArray *array2 = [fm subpathsOfDirectoryAtPath:path error:nil];

// for (id obj in array2) {
// NSLog(@"%@",obj);
// }

    //3.在指定的路径下,创建新的目录;
    //1)第一个参数:路径;
    //2)第二个参数:如果为YES,系统会自动帮我们创建中间目录,如果为NO,则不会,建议一般都是用YES;
    //3)第三个参数:表示文件的属性,通常写nil;
    //4)第四个参数:表示错误信息,写nil;
    NSString *path1 = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/fileManager/middle/dir"];
    BOOL isSuccess = [fm createDirectoryAtPath:path1 withIntermediateDirectories:YES attributes:nil error:nil];
    if (isSuccess) {
        NSLog(@"创建成功!");
    }else{
        NSLog(@"创建失败");
    }
    
    
    //4.在指定的目录下创建文件
    //1)第一个参数:路径;
    //2)第二个参数:文件里的内容,NSData表示二进制数据;
    //3)第三个参数:文件的属性,写nil;
    
    //拼接文件路径
    NSString *filePath = [path1 stringByAppendingPathComponent:@"file.txt"];
    //准备数据
    NSString *str = @"I am a good teather";
    //把字符串转换成二进制数据                          【****重点】
    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
    
    
    BOOL isSuccess2 = [fm createFileAtPath:filePath contents:data attributes:nil];
    if (isSuccess2) {
        NSLog(@"创建成功!");
    }else{
        NSLog(@"创建失败");
    }
    
    
    
    //五.目录的拷贝和移动
    //1.拷贝
    //原目录的路径path1
    //拼接最终目录的路径
    NSString *toPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/fileManager/copyDir"];
    
    
    //第一个参数:原目录的路径
    //第二个参数:最终目录的路径(注:该路径具体到拷贝过去之后的目录名)
    //第三个单数:
    BOOL isCopySuccess = [fm copyItemAtPath:path1 toPath:toPath error:nil];
    if (isCopySuccess) {
        NSLog(@"拷贝成功!");
    }else{
        NSLog(@"拷贝失败!");
    }
    
    //2.移动
    NSString *toPath1 = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/fileManager/file.txt"];
    BOOL isMoveSuccess = [fm moveItemAtPath:filePath toPath:toPath1 error:nil];
    if (isMoveSuccess) {
        NSLog(@"移动成功!");
    }else{
        NSLog(@"移动失败!");
    }
    
    //3.判断目录是否存在
    BOOL isExists = [fm fileExistsAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/fileManager"]];
    if (isExists) {
        NSLog(@"存在");
    }else{
        NSLog(@"不存在");
    }
    
    
    //4.检测“XX”是文件还是目录?
    //第一个参数:
    //第二个参数:isDirectory,需要传入一个BOOL类型的地址,用于获取是否是目录还是文件
    //YES--->目录
    //NO---->不是目录,是文件
    BOOL isFile;
    [fm fileExistsAtPath:toPath1 isDirectory:&isFile];
    if (isFile == YES) {
        NSLog(@"是目录");
    }else{
        NSLog(@"不是目录,是文件");
    }
    
    
    //5.删除目录(文件)
    BOOL isRemoveSuccess = [fm removeItemAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/fileManager/middle"] error:nil];
    if (isRemoveSuccess) {
        NSLog(@"删除成功");
    }else{
        NSLog(@"删除失败");
    }
    
    
    //6.获取文件属性
    NSDictionary *dict = [fm attributesOfItemAtPath:toPath1 error:nil];
    NSLog(@"%@",dict);
    //获得文件的大小
    NSNumber *size = dict[@"NSFileSize"];
    //拆开成int,NSInteger都可以
    NSInteger sizeInteger = [size integerValue];
    NSLog(@"文件大小为:%ld",sizeInteger);

二.NSFileHandle方法
//一.以只读的形式打开
NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/fileManager/file.txt"]];
//1.把文件内容一次性从头读到尾
// NSData *data = [fh readDataToEndOfFile];
// //.把二进制数据转换成字符串 【******重点】
// NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// //字符串转换成二进制数据 【******重点】
//// [str dataUsingEncoding:NSUTF8StringEncoding];
// NSLog(@"str = %@",str);

    //2.给文件按字节数读取

// NSData *data1 = [fh readDataOfLength:5];
// NSString *str1 = [[NSString alloc] initWithData:data1 encoding:NSUTF8StringEncoding];
// NSLog(@"%@",str1);
// //后面接着读取,接在上次读取的位置后面往后读取
// NSData *data2 = [fh readDataOfLength:3];
// NSString *str2 = [[NSString alloc] initWithData:data2 encoding:NSUTF8StringEncoding];
// NSLog(@"%@",str2);

    //3.根据光标指定的位置往后读取多少个字节;
    //先移动光标到指定的位置
    [fh seekToFileOffset:7];
    NSData *data3 = [fh readDataOfLength:4];
    NSString *str3 = [[NSString alloc] initWithData:data3 encoding:NSUTF8StringEncoding];
    NSLog(@"%@",str3);

    //二.以只写的形式打开文件
    NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/fileManager/file.txt"]];
    
    //1.准备数据
    NSString *dataStr = @"\n通知:今天下午学习日期类和时间戳";
    NSData *data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
    //2.写入方式(默认是以覆盖的形式写入)
    //设置光标的位置到文件的尾部
    
    
    //或者设置光标到某个具体的位置,从该位置开始写,以覆盖的形式往后写;
    [fh seekToEndOfFile];
    [fh writeData:data];
    
    
    
    //3.截取文件到指定的字节
    //截取文件到0个字节,相当于清空当前文件内容;
    [fh truncateFileAtOffset:0];
    //关闭文件
    [fh closeFile];
    
    
    //三.以读写的形式打开(读写的方法都可以使用)
    NSFileHandle *hangle = [NSFileHandle fileHandleForUpdatingAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/fileManager/file.txt"]];

三 NSDate

        //<1>获取当前系统时间     【***重点】默认是GTM:格林威治时间
    NSDate *date = [NSDate date];
    NSLog(@"date1 = %@",date);
    
    //<2>以当前时间为准,然后过了多少秒之后的时间   【****重点】
    NSDate *date1 = [NSDate dateWithTimeIntervalSinceNow:8*3600];
    NSLog(@"%@",date1);
    
    //<3>以1970/01/01  GTM时间为准 然后过了多少秒后的时间
    NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:365*24*3600];
    NSLog(@"%@",date2);
    
    //<4>以某个具体的时间为基准,过了多少秒之后的时间   【掌握】
    NSDate *date3 = [NSDate dateWithTimeInterval:24*3600 sinceDate:date2];
    NSLog(@"%@",date3);
    
    //<5>遥远的将来的一个时间
    NSDate *date4 = [NSDate distantFuture];
    NSLog(@"%@",date4);
    
    //<6>遥远的过去的一个时间
    NSDate *date5 = [NSDate distantPast];
    NSLog(@"%@",date5);
    
    
    //<7>计算当前时间与某个时间的时间间隔       【***重点】
    NSTimeInterval time1 = [date1 timeIntervalSinceNow];
    NSLog(@"time = %.2f",time1/3600);
    
    //<8>比较两个时间,求两个时间的间隔
    NSTimeInterval time2 = [date3 timeIntervalSinceDate:date2];
    NSLog(@"time2 = %.2f",time2/3600);
    
    
    //<9>比较两个时间,返回较早的时间
    NSDate *earlierDate = [date2 earlierDate:date3];
    NSLog(@"earlierDate = %@",earlierDate);
    
    //<10>比较两个时间,返回较晚的时间
    NSDate *laterDate = [date2 laterDate:date3];
    NSLog(@"laterDate = %@",laterDate);


        //1.创建一个时间戳对象
    NSDateFormatter *fomatter = [[NSDateFormatter alloc] init];
    
    //2.设置格式  【***重点】   <反斜杠不能用>

// fomatter.dateFormat = @"yyyy年MM月dd日 HH:mm:ss";
fomatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

    //3.把时间对象转换成字符串对象           【***重点】
    NSString * dataStr = [fomatter stringFromDate:[NSDate date]];
    NSLog(@"dataStr = %@",dataStr);
    
    //*****把字符串转换成时间对象
    NSString *str = @"2016-5-13 9:00:00";
    NSDate *newDate = [fomatter dateFromString:str];
    NSLog(@"newDate = %@",newDate);

你可能感兴趣的:(day11---文件管理,目录操作,日期类)