iOS文件管理

NSFileManager和NSFilehandle類markdown

NSFileManager

NSFileManager 類是Foundation框架中用來管理和操做文件、目錄等文件系統相關聯內容的類。 NSFileHandle類,須要配合NSFileManager文件管理類,對文件內容進行寫入、讀取數據等操做。實現文件的增刪改查等功能框架

  • 建立文件夾
// 獲取沙盒路徑
 NSString *documentsPath =[self getDocumentPath];

 NSFileManager *fileManager = [NSFileManager defaultManager];
// 拼接, 建立文件夾路徑
 NSString * testDirectory = [documentsPath stringByAppendingPathComponent:@"日記"];
 // 建立文件夾
BOOL res = [fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];
    
if (res) {
    NSLog(@"文件夾建立成功");
}
複製代碼
  • 建立文件
NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];
    BOOL res1 = [fileManager createFileAtPath:testPath contents:nil attributes:nil];
    if (res1) {
        NSLog(@"文件建立成功: %@" ,testPath);
    }

// 寫入內容
   NSString * str = @"你是一位好同志";
   BOOL res2 = [str writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
    if (res2) {
        NSLog(@"文件寫入成功");
    }
複製代碼
  • 判斷文件是否存在
if ([fileManager fileExistsAtPath:testPath]) {
        NSLog(@" 存在 ");
    }
複製代碼
  • 刪除文件
BOOL isOK = [fileManager removeItemAtPath:testPath error:nil];
    if (isOK) {
        NSLog(@"-- 成功刪除---");
    }
複製代碼
  • 拷貝文件
//目標文件 路徑
    NSString *targetPath = [testDirectory stringByAppendingPathComponent:@"test1.txt"];
// 拷貝
    [fileManager copyItemAtPath:testPath toPath:targetPath error:nil]; 
複製代碼
  • 移動文件
[fileManager moveItemAtPath:testPath toPath:targetPath error:nil];
複製代碼
  • 計算文件大小
- (unsigned long long)fileSizeAtPath:(NSString *)filePath {
    NSFileManager *fileManager = [NSFileManager defaultManager];

    BOOL isExist = [fileManager fileExistsAtPath:filePath];

    if (isExist) {
        unsigned long long fileSize = [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];
        return fileSize;
    } else {
        NSLog(@"file is not exist");
        return 0;
    }
}
複製代碼
  • 計算整個文件夾中全部文件大小
- (unsigned long long)folderSizeAtPath:(NSString*)folderPath {
    NSFileManager *fileManager = [NSFileManager defaultManager];

    BOOL isExist = [fileManager fileExistsAtPath:folderPath];
    if (isExist) {
        NSEnumerator *childFileEnumerator = [[fileManager subpathsAtPath:folderPath] objectEnumerator];
        unsigned long long folderSize = 0;
        NSString *fileName = @"";

        while ((fileName = [childFileEnumerator nextObject]) != nil){
            NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
            folderSize += [self fileSizeAtPath:fileAbsolutePath];
        }
        return folderSize / (1024.0 * 1024.0);
    } else {
        NSLog(@"file is not exist");
        return 0;
    }
}
複製代碼

NSFilehandle

經常使用方法atom

+ (id)fileHandleForReadingAtPath:(NSString *)path //打開一個文件準備讀取
+ (id)fileHandleForWritingAtPath:(NSString *)path //打開一個文件準備寫入   
+ (id)fileHandleForUpdatingAtPath:(NSString *)path //打開一個文件準備更新
- (NSData *)availableData; //從設備或通道返回可用的數據            
- (NSData *)readDataToEndOfFile; //從當前的節點讀取到文件的末尾              
- (NSData *)readDataOfLength:(NSUInteger)length; // 從當前節點開始讀取指定的長度數據                           
- (void)writeData:(NSData *)data; //寫入數據       
- (unsigned long long)offsetInFile; //獲取當前文件的偏移量          
- (void)seekToFileOffset:(unsigned long long)offset; //跳到指定文件的偏移量    
- (unsigned long long)seekToEndOfFile; //跳到文件末尾      
- (void)truncateFileAtOffset:(unsigned long long)offset; //將文件的長度設爲offset字節
- (void)closeFile; 關閉文件

複製代碼
  • 追加寫入內容
NSFileHandle * handFile = [NSFileHandle fileHandleForUpdatingAtPath:testPath];

   [handFile seekToEndOfFile]; // 文件光標移動末尾
    NSString * str1 = @"追加內容"; // 追加內容
    // 轉換文件格式
    NSData * data = [str1 dataUsingEncoding:NSUTF8StringEncoding];
    // 寫入
    [handFile writeData:data];
    [handFile closeFile];// 關閉

複製代碼

獲取文件

NSString * content = [NSString stringWithContentsOfFile: testPath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"拿到文章的內容  -- %@",content);

複製代碼

文件轉換

  • NSString 轉換 NSData
NSString * string = @"123456";
//NSString 轉換爲 NSData
NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];
//NSData 轉換爲 NSString
NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
複製代碼
  • UIImage 轉換 NSData
//NSData 轉換爲 UIImage
    NSString * imagePath = @"/Users...../yyyy.png";
    NSData * imageData = [NSData dataWithContentsOfFile: imagePath];
    UIImage * image = [UIImage imageWithData: imageData];
    //UIImage 轉換爲 NSData
    NSData * imageData1 = UIImagePNGRepresentation(image);
複製代碼
相關文章
相關標籤/搜索