1.NSString和NSData互相轉化
NSString * str = @"hello世界";
NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"數據大小:%lu",data.length);
NSLog(@"字符串長度:%lu",str.length);
//一個漢字的長度是1,佔3個字節
NSString * strData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",strData);
2.文件管理類NSFileManager
對文件進行管理操作:
①遍歷查看目錄下的文件
【深度遍歷】
【淺度遍歷】
②創建文件/目錄
③拷貝文件/目錄
④移動文件/目錄
⑤刪除文件/目錄
⑥獲取文件屬性
新建HTFileManager類
①HTFileManager.h
#import <Foundation/Foundation.h>
@interface HTFileManager : NSObject
//創建文件目錄/文件
+(void)createDirectoryOrFile;
//遍歷目錄下的內容
+(void)scanDirectoryOrFile;
//拷貝文件/目錄
+(void)copyDirectoryOrFile;
//移動文件/目錄
+(void)moveDirectoryOrFile;
//刪除文件/目錄
+(void)removeDirectoryOrFile;
//獲取文件屬性
+(void)attributeForDirectoryOrFile;
@end
②HTFileManager.m
#import "HTFileManager.h"
#define Desktop @"/Users/yimiyangguang/Desktop"
#define FILM @"/Users/yimiyangguang/Desktop/Film1"
@implementation HTFileManager
+ (void)createDirectoryOrFile {
NSFileManager * fileManager = [NSFileManager defaultManager];
//在桌面上創建一個文件夾 Film1
NSString * path = [Desktop stringByAppendingPathComponent:@"Film1"];
NSLog(@"Path = %@",path);
//判斷一個目錄是否存在,不存在則創建
if (![fileManager fileExistsAtPath:path]) {
NSError * error = nil;
/**
* @param path:目錄的路徑
* @param createIntermediates:中間目錄是否缺省,默認填YES
* @param attributes:目錄的屬性,默認填nil,(包含默認屬性)
* @param error:&error
*/
BOOL success = [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error];
if (success) {
NSLog(@"目錄創建成功");
}else{
NSLog(@"目錄創建失敗,error:%@",error);
}
}else{
NSLog(@"該目錄已存在");
}
//創建一個文件 test.txt
NSString * filePath = [path stringByAppendingPathComponent:@"test.txt"];
NSString * content = @"睡一覺,明天更美好!";
NSData * data = [content dataUsingEncoding:NSUTF8StringEncoding];
if (![fileManager fileExistsAtPath:filePath]) {
/**
* @param path:文件路徑
* @param data:文件的內容,當是nil,創建出的是空文件
* @param attr:文件的屬性
*/
BOOL success = [fileManager createFileAtPath:filePath contents:data attributes:nil];
if (success) {
NSLog(@"文件創建成功");
}else {
NSLog(@"文件創建失敗");
}
}else{
NSLog(@"文件已存在");
}
}
+ (void)scanDirectoryOrFile {
NSFileManager * fileManager = [NSFileManager defaultManager];
//淺度遍歷(一級目錄)
if ([fileManager fileExistsAtPath:@"/Users/yimiyangguang/Desktop/Film1"]) {
NSArray * array = [fileManager contentsOfDirectoryAtPath:@"/Users/yimiyangguang/Desktop/Film1" error:nil];
NSLog(@"%@",array);
}
//深度遍歷(子目錄的子目錄的子目錄。。。)
if ([fileManager fileExistsAtPath:@"/Users/yimiyangguang/Desktop/Film1"]) {
NSArray * array = [fileManager subpathsOfDirectoryAtPath:@"/Users/yimiyangguang/Desktop/Film1" error:nil];
NSLog(@"深度遍歷:%@",array);
}
}
+ (void)copyDirectoryOrFile {
NSFileManager * fm = [NSFileManager defaultManager];
NSString * strPath = FILM;
NSString * dstPath = @"/Users/yimiyangguang/Desktop/File2";
NSError * error = nil;
if ([fm fileExistsAtPath:strPath]) {
/**
* @param srcPath:原路徑
* @param dstPath:目的路徑
* @error error:&error
*/
BOOL success = [fm copyItemAtPath:strPath toPath:dstPath error:&error];
if (success) {
NSLog(@"copy 成功");
}else {
NSLog(@"copy 失敗 %@",error);
}
}else {
NSLog(@"源文件不存在");
}
}
+ (void)moveDirectoryOrFile {
NSFileManager * fm = [NSFileManager defaultManager];
//移動的過程中也可以修改文件名
NSString * srcPath = FILM;
NSString * desPath = @"/Users/yimiyangguang/Desktop/File2/File3";
NSError * error = nil;
BOOL success = [fm moveItemAtPath:srcPath toPath:desPath error:&error];
if (success) {
NSLog(@"move 成功");
}
}
+ (void)removeDirectoryOrFile {
NSFileManager * fm = [NSFileManager defaultManager];
NSString * path = @"/Users/yimiyangguang/Desktop/File2/File3";
if ([fm fileExistsAtPath:path]) {
BOOL success = [fm removeItemAtPath:path error:nil];
if (success) {
NSLog(@"success");
}else{
NSLog(@"failed");
}
}
}
+ (void)attributeForDirectoryOrFile {
NSFileManager * fm = [NSFileManager defaultManager];
NSString * path = @"/Users/yimiyangguang/Desktop/File2/Second/4.jpg";
if ([fm fileExistsAtPath:path]) {
NSDictionary * dict = [fm attributesOfItemAtPath:path error:nil];
NSLog(@"%@",dict);
}
}
@end
③main.m
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "HTFileManager.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
//依次調用文件管理方法進行測試
[HTFileManager createDirectoryOrFile];
[HTFileManager scanDirectoryOrFile];
[HTFileManager copyDirectoryOrFile];
[HTFileManager moveDirectoryOrFile];
[HTFileManager removeDirectoryOrFile];
[HTFileManager attributeForDirectoryOrFile];
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
3.文件句柄類NSFileHandle
①對文件進行讀寫首先需要NSFileHandle打開文件
②NSFileHandle對文件進行讀寫都是NSData類型的二進制數據
③NSData與NSString之間的相互轉換
④操作文件完成後,記得closeFile
實際操作:
①對文件寫入數據
②對文件中的數據定位
③複製文件中的內容
新建HTFileHandle文件
①HTFileHandle.h
#import <Foundation/Foundation.h>
@interface HTFileHandle : NSObject
+ (void)test;
@end
②HTFileHandle.m
#import "HTFileHandle.h"
#define FILE_PATH @"/Users/yimiyangguang/Desktop/test.txt"
@implementation HTFileHandle
+ (void)test {
/**
* 類方法中self代表的是當前類LPCFileManager
* 對象方法中self代表的是指向當前類LPCFileManager的對象
*/
//讀取文件內容
[self readFile];
//將內容寫入文件
[self writeFile];
}
+ (void)readFile {
/**
* 以只讀方式打開:[NSFileHandle fileHandleForReadingAtPath:FILE_PATH];
* 以讀寫方式打開:[NSFileHandle fileHandleForUpdatingAtPath:FILE_PATH];
*/
NSFileHandle * fh = [NSFileHandle fileHandleForReadingAtPath:FILE_PATH];
NSData * data = [fh readDataToEndOfFile];
//把NSData轉化爲NSString
NSString * content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",content);
//設置偏移量:因爲一個漢字佔3個字節,當設置偏移量或獲取長度的時候,不能取到漢字的中間位置
[fh seekToFileOffset:1 * 3];
//讀取指定長度的數據
NSData * data2 = [fh readDataOfLength:3 * 1];
NSString * content2 = [[NSString alloc] initWithData:data2 encoding:NSUTF8StringEncoding];
NSLog(@"%@",content2);
//關閉文件
[fh closeFile];
}
+ (void)writeFile {
/**
* 以只寫方式打開:[NSFileHandle fileHandleForWritingAtPath:FILE_PATH];
* 以讀寫方式打開:[NSFileHandle fileHandleForUpdatingAtPath:FILE_PATH];
*/
NSFileHandle * fh = [NSFileHandle fileHandleForUpdatingAtPath:FILE_PATH];
//在文件的末端寫入數據(追加內容)
[fh seekToEndOfFile];
NSString * str = @"我們應該原諒他嗎?";
NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
[fh writeData:data];
[fh closeFile];
}
@end
③main.m
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "HTFileHandle.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
[HTFileHandle test];
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}