自学iOS开发系列----OC(文件管理类、文件句柄类)

来源:互联网 发布:仿淘宝商城系统源码 编辑:程序博客网 时间:2024/06/07 04:07

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]));    }}
0 0
原创粉丝点击