自学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
- 自学iOS开发系列----OC(文件管理类、文件句柄类)
- 自学iOS开发系列----OC(内存管理)
- 自学iOS开发系列----OC(数组)
- 自学iOS开发系列----OC(继承)
- 自学iOS开发系列----OC(block)
- [黑马IOS自学第九篇]OC语言基础,面向对象概念,类的创建,OC多文件开发等
- 自学iOS开发系列----OC(类别和扩展)
- 自学iOS开发系列----OC(JSON解析)
- 自学iOS开发系列----OC(协议和委托代理)
- iOS - OC NSFileManager文件管理
- 自学iOS开发系列----OC(属性、点语法、修饰符)
- iOS开发-文件管理
- iOS开发-文件管理
- ios开发----文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- iOS开发-文件管理
- PowerDesigner15.1使用技巧
- fragment调用方法isadded()、isvisible()
- 用matlab生成黑白棋盘格作相机标定模板
- IE6的常见浏览器兼容问题
- C#使用webBrowse获取HTML时会弹出脚本错误的解决办法
- 自学iOS开发系列----OC(文件管理类、文件句柄类)
- Linux中断(interrupt)子系统之一:中断系统基本原理
- 设计模式学习笔记--解释器模式
- mysql之group_concat函数详解:将相同的行组合起来
- android6.0动态授权
- NYOJ-58 最少步数
- iOS9和iOS10推送的问题总结
- ios 避免程序crash的有效解决方法
- Struts2.x和Struts1.x的区别