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]));
}
}