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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章