OC语法 Foundation框架中的-文件管理器

一:文件管理器 —NSFileManager                                                                                                                             

本小节主要说一下 NSFileManager 的defaultManager 方法,因为这个方法使用单利模式写的

废话不多说,直接上代码:

#import <Foundation/Foundation.h>
#import "User.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //创建一个文件管理器,这节主要说的就是文件管理器的defaultManager方法,
        //这是个单利模式的方法,后面我们会模仿一个
        NSFileManager *fileManager1 = [NSFileManager defaultManager];
        NSLog(@"fileManager1 的地址为:%p",fileManager1);
        NSFileManager *fileManager2 = [NSFileManager defaultManager];
        NSLog(@"fileManager2 的地址为:%p",fileManager2);
        NSFileManager *fileManager3 = [[NSFileManager alloc]init];
        NSLog(@"fileManager3 的地址为:%p",fileManager3);
        NSFileManager *fileManager4 = [NSFileManager defaultManager];
        NSLog(@"fileManager4 的地址为:%p",fileManager4);
        
        //为什么上面的结果是哪个样子的呢?没有创建新的对象吗?
        //这是因为defaultManager 是单利模式的方法,(两个对象指向同一块地址,就跟string中两个对象指向同一块地址一样)
        //我们来重新写一个方法,搞清他的工作原理
        //创建一个User类,来模仿他,我们写一个方法叫做defaultUser的方法
        
        /*
         写单利模式之前结果是不一样的
        User *u1 = [User defaultUser];
        NSLog(@"u1的地址为:%@",u1);
        User *u2 = [User defaultUser];
        NSLog(@"u2的地址为:%@",u2);
        */
        //写好单利模式之后
        User *u1 = [User defaultUser];
        u1.age=10;
        NSLog(@"u1的地址为:%p",u1);
        User *u2 = [User defaultUser];
        NSLog(@"u2的age是不是10呢????请看结果:%i",u2.age);
        NSLog(@"u2的地址为:%p",u2);
        
        User *u3 = [[User alloc]init];
        NSLog(@"u3的地址为:%p",u3);
        //查看打印结果可以看出我们打印成功了
        
    }
    return 0;
}

自己模拟写一个单利模式,创建一个User类,下面是user类的.h文件

#import <Foundation/Foundation.h>

@interface User : NSObject

@property(nonatomic,assign)int age;

+(User *)defaultUser;

@end

下面User类的.m文件,重点再这里面:

#import "User.h"

@implementation User

//static 变量就是说,在整个程序没有退出之前,只需要创建一次,就能够一直的使用。
static User *instance = nil;
+(User *)defaultUser
{
    if (instance == nil) {
        instance = [[self alloc]init];
    }
    //return [[self alloc]init];单利模式之前
    return instance;
}

@end

二:获取文件属性                                                                                                                                                        

文件属性就是指:获得文件创建时间,文件大小,文件修改时间等一些属性;(右击文件夹显示简介中会有)

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        /*
        //我们先回忆一下NSString 是怎么把数据写进文件的
        NSString *str = @"www.baidu.com";
        
        NSString *path = @"/Users/renwenyi/Desktop/Text/text.txt";
        NSError *error;
        BOOL isWriteSuccess = [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
        if (isWriteSuccess) {
            NSLog(@"创建成功");
        }
        else
        {
            NSLog(@"error");
        }
         */
        
        //1:获取文件管理器
        NSFileManager *fileManager = [NSFileManager defaultManager];
        //文件属性可右键文件夹点击显示简介中查看,attribute属性的意思
        NSString *path = @"/Users/renwenyi/Desktop/Text/text.txt";
        NSString *error;
        NSDictionary *dict = [fileManager attributesOfItemAtPath:path error:&error];
        if (error !=nil) {
            NSLog(@"error 为:%@",error);
        }else
        {
            NSLog(@"dict 为:%@",dict);
            NSData *date = [dict objectForKey:NSFileCreationDate];
            NSString *size = [dict objectForKey:NSFileSize];
            NSData *dateModiy = [dict objectForKey:NSFileModificationDate];
            NSLog(@"文件创建时间:%@,文件大小为:%@,文件修改日期为:%@",date,size,dateModiy);
            
        }
        
    }
    return 0;
}
三:获得文件目录下的文件与子目录列表                                                                                                                 

具体实现如下所示:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1:首先要获得文件管理器
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString *path = @"/Users/renwenyi/Desktop/Text";
        NSString *error;
        //这个方法只能够获得目标目录下第一级目录,也就是说如果你的文件夹里面还有文件夹,那么这个第二层文件夹里面的内容就不会再显示出来了,只能显示出你的第一层文件夹信息
        NSArray *array = [fileManager contentsOfDirectoryAtPath:path error:&error];
        NSLog(@"文件目录下的内容为:%@",array);
        //2:如果我们想要显示一个文件夹中的所有元素,(就是逐级所有子集的目录)包括文件夹下的文件里面东西,那么就要用到下面这个方法
        NSArray *array2 = [fileManager subpathsOfDirectoryAtPath:path error:&error];
        NSLog(@"所有文件为:%@",array2);
        //如果是第二级目录下的文件会在文件夹后面有个“/”,见图解
            
    }
    return 0;
}
四:管理目录                                                                                                                                                                

1:创建目录

2:移动目录

3:删除目录

4:copy内容

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //1:创建目录
        /*
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString *path = @"/Users/renwenyi/Desktop/wenyiFloder/ccc";
        
        NSString *error;
        //withIntermediateDirectories YES表示它会自动的逐级进行创建目录,NO表示只能创建一级目录
        BOOL isCreateSuccess = [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error];
        if (isCreateSuccess) {
            NSLog(@"创建成功");
        }
        else
        {
            NSLog(@"创建失败");
        }*/
        
        
        //2:移动目录(相当于剪切操作,但是剪切的是文件夹中的东西,剪切的文件夹消失);
        /*
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString *path1 = @"/Users/renwenyi/Desktop/wenyiFloder";
        NSString *path2 = @"/Users/renwenyi/Desktop/newwenyiFloder";
        NSError *error ;
        BOOL isMoveSuccess = [fileManager moveItemAtPath:path1 toPath:path2 error:&error];
        
        if (isMoveSuccess) {
            NSLog(@"移动成功");
        }
        else
        {
            NSLog(@"移动失败");
        }
         */
        
        //3:删除目录
        /*
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString *path = @"/Users/renwenyi/Desktop/newwenyiFloder";
        NSError *error;
         //到回收站里面了
        BOOL isremoveSuccess = [fileManager removeItemAtPath:path error:&error];
        if (isremoveSuccess) {
            NSLog(@"删除成功");
        }
        else
        {
            NSLog(@"删除失败");
        }
        */
        
        //4:copy 内容
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString *path1 = @"/Users/renwenyi/Desktop/wenyiFolder";
        NSString *path2 = @"/Users/renwenyi/Desktop/newwenyiFolder";
        NSError *error;
        BOOL isCopySuccess = [fileManager copyItemAtPath:path1 toPath:path2 error:&error];
        if (isCopySuccess) {
            NSLog(@"copy成功");
        }
        else
        {
            NSLog(@"拷贝失败 %@",error);
        }
        
    }
    return 0;
}
五:管理文件                                                                                                                                                                 

代码中的文件用的是一张图片

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1:获得一个文件,并根据它在创建一个文件
        /*
        NSString *path = @"/Users/renwenyi/Desktop/屏幕快照.png";
        //NSData 只要是文件格式他都能读取,eg:mp3,mp4,rmvb,mkv,pdf,doc,txt,都可以把这些当成一个文件
        NSData *data = [NSData dataWithContentsOfFile:path];
        NSLog(@"%ld",data.length);
        
        //目标:把一个文件创建成一个新的文件(以上面的data为例,把它当成一个文件)
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString *path2 = @"/Users/renwenyi/Desktop/屏幕快照2.png";
        BOOL isCreateSuccess = [fileManager createFileAtPath:path2 contents:data attributes:nil];
        if (isCreateSuccess) {
            NSLog(@"创建成功");
        }else
        {
            NSLog(@"创建失败");
        }
         */
        
        //2:移动文件到指定的目录,移动相当于剪切操作
        /*
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString *path1 = @"/Users/renwenyi/Desktop/12.png";
        NSString *path2 = @"/Users/renwenyi/Desktop/456/123455.png";
        NSString *error;
        BOOL isMoveSuccess = [fileManager moveItemAtPath:path1 toPath:path2 error:&error];
        if (isMoveSuccess) {
            NSLog(@"移动成功");
        }
        else
        {
            NSLog(@"error %@",error);
        }
         */
        
        //3:删除文件
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString *path1 = @"/Users/renwenyi/Desktop/123455.png";
        NSError *error;
        BOOL isRemoveSuccess = [fileManager removeItemAtPath:path1 error:&error];
        if (isRemoveSuccess) {
            NSLog(@"删除成功");
        }
        else
        {
            NSLog(@"error %@",error);
        }
        
    }
    return 0;
}
六:使用NSData处理数据                                                                                                                                            

当我们用到音频文件,文本文件,视频文件的时候就必须要用到NSData数据类型

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1:当我们用到音频文件,文本文件,视频文件的时候就必须要用到NSData数据类型
        //先把一个字符串写入桌面txt
        /*
        NSString *str = @"www.baidu.com";
        NSString *path1 = @"/Users/renwenyi/Desktop/renwenyi.txt";
        NSError *error;
        [str writeToFile:path1 atomically:YES encoding:NSUTF8StringEncoding error:&error];
        */
        
        
        //注意:NSData是一个不可变长度的Data类型,只能够通过一次加载完成所有的数据
        
        //把文件写入到内存当中
        /*
        NSString *path = @"/Users/renwenyi/Desktop/renwenyi.txt";
        NSData *data = [NSData dataWithContentsOfFile:path];
        NSLog(@"data的长度:%ld",data.length);
        //把写入到内存中的文件,写入指定的位置
        NSString *path2 = @"/Users/renwenyi/Desktop/newrenwenyi.txt";
       BOOL isWriteSuccess =  [data writeToFile:path2 atomically:YES];
        if (isWriteSuccess) {
            NSLog(@"写入成功");
        }
        else
        {
            NSLog(@"写入失败");
        }
         */
        
        //2:可变长度的Data类型NSMutableData
        //当我们需要把多个NSData拼接成数据存储的时候,就要想到使用NSMutable这个类型
        NSString *str1 = @"皇上驾到1次";
        NSString *str2 = @"皇上驾到2次";
        NSString *str3 = @"爱卿平身...";
        
        NSMutableData *muData = [[NSMutableData alloc]init];
        
        //下面是写入内存,相当于dataWithContents
        NSData *d1 = [str1 dataUsingEncoding:NSUTF8StringEncoding];
        NSData *d2 = [str2 dataUsingEncoding:NSUTF8StringEncoding];
        NSData *d3 = [str3 dataUsingEncoding:NSUTF8StringEncoding];
        
        //appendData 能够把NSData对象加入到 muData 中
        [muData appendData:d1];
        [muData appendData:d2];
        [muData appendData:d3];
        NSString *path = @"/Users/renwenyi/Desktop/haoren.txt";
        //writeToFile是NSData的方法,但是NSMutable继承字NSData 所以可以调用,表示写入到指定目录下
        BOOL isWriteSuccess = [muData writeToFile:path atomically:YES];
        if (isWriteSuccess) {
            NSLog(@"创建成功");
        }
        else
        {
            NSLog(@"创建失败");
        }
        
    }
    return 0;
}


发布了30 篇原创文章 · 获赞 0 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章