NSFileManager和NSFilehandle類markdown
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;
}
}
複製代碼
經常使用方法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 * string = @"123456";
//NSString 轉換爲 NSData
NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];
//NSData 轉換爲 NSString
NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
複製代碼
//NSData 轉換爲 UIImage
NSString * imagePath = @"/Users...../yyyy.png";
NSData * imageData = [NSData dataWithContentsOfFile: imagePath];
UIImage * image = [UIImage imageWithData: imageData];
//UIImage 轉換爲 NSData
NSData * imageData1 = UIImagePNGRepresentation(image);
複製代碼