iOS - 文件操作(File Operating)
1. 沙盒 & NSData
/*_______________________________获取沙盒路径_________________________________________*/
//第一种获取方式
//NSHomeDirectory();获取到沙盒的目录路径
NSString *homePath = NSHomeDirectory();
NSLog(@"沙盒目录:%@",homePath);
NSString *docPath1 = [NSString stringWithFormat:@"%@/Documents",homePath];
NSString *docPath2 = [homePath stringByAppendingString:@"/Documents"];
NSLog(@"\ndocPath1:%@,\ndocPath2:%@",docPath1,docPath2);
//第二种获取方式.
/*
NSDocumentDicrectory: Documents文件夹
NSLibraryDirectory : Library文件夹
*/
/*
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@"array:%@",array);
2. 沙盒 & NSData & NSFileManager
(NSFileManager:文件的创建、复制、删除、前切文件(注意:操作对象为文件,而不是文件内容)。)
//演示路径
NSString *path = @"/Users/apple/file.text";
//1.返回路径的组成部分
NSArray *array = [path pathComponents];
NSLog(@"pathComponents:%@",array);
//2.路径的最后组成部分
NSString *lastPathComponent = [path lastPathComponent];
NSLog(@"lastComponent:%@",lastPathComponent);
//3.追加子路径
NSString *newPath1 = [path lastPathComponent];
NSLog(@"newPath1=%@",newPath1);
NSString *newPath2 = [path stringByAppendingPathComponent:@"/appFile.text"];
NSLog(@"newPath2:%@",newPath2);
//4.删除最后的组成部分
NSString *deleteLast = [path stringByDeletingLastPathComponent];
NSLog(@"deleteLast:%@",deleteLast);
//5.删除扩展名
NSString *deleteExtension = [path stringByDeletingPathExtension];
NSLog(@"deleteExtension:%@",deleteExtension);
//6.获取路径最后组成部分的扩展名
NSString *extension =[path pathExtension];
NSLog(@"extension:%@",extension);
//7.追加扩展名
NSString *appendExt = [path stringByAppendingPathExtension:@"jpg"];
NSLog(@"appendExt:%@",appendExt);
//NSString->NSData
NSString *s = @"tsdfsdfsdfsdf";
NSData *data = [s dataUsingEncoding:NSUTF8StringEncoding];
//NSData->NSString
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"str:%@",str);
//NSMutableData 可变的Data对象,可以追加数据
3. 沙盒 & NSData & NSFileManager
(NSFileManger:文件的创建、复制、删除、剪切文件(注意:操作对象为文件,而不是文件内容))
/*___________________________________1.创建文件_____________________________________*/
/*
//获取当前app的沙盒目录
NSString *homePath = NSHomeDirectory();
//追加子路径
NSString *filePath = [homePath stringByAppendingPathComponent:@"Documents/file.text"];
//NSFileManager不能使用alloc创建,这个类设计为单例
NSFileManager *fileManager1 = [NSFileManager defaultManager];
NSFileManager *fileManager2 = [NSFileManager defaultManager];
NSLog(@"f1=%p,f2=%p",fileManager1,fileManager2); //观察地址,发现相同
//NSFileManager只能通过类方法defaultManager创建
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *string = @"自动化测试部";
//将NSString 转化为 NSData对象.
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
//根据路径filePath创建对应的文件,注意:只能创建文件,不能创建目录(文件夹).
BOOL success = [fileManager createFileAtPath:filePath contents:data attributes:nil];
if (success) {
NSLog(@"文件创建成功");
}else {
NSLog(@"文件创建失败");
}
//创建文件夹
NSString *filePath2 = [homePath stringByAppendingPathComponent:@"Documents/demo"];
NSError *error;
BOOL success2 = [fileManager createDirectoryAtPath:filePath2 withIntermediateDirectories:YES attributes:nil error:&error];
if (!success2) {
NSLog(@"创建失败:%@",error);
}
*/
/*___________________________________2.读取文件_____________________________________*/
/*
//获取当前app的沙盒根目录
NSString *homePath = NSHomeDirectory();
//追加子路径
NSString *filePath = [homePath stringByAppendingPathComponent:@"Documents/file.text"];
NSFileManager *fileManager = [NSFileManager defaultManager];
//根据路径读取文件中的数据
NSData *data = [fileManager contentsAtPath:filePath];
//NSData 转 NSString
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",string);
*/
/*___________________________________3.移动(前切)文件_____________________________________*/
/*
//获取当前app的沙盒根目录
NSString *homePath = NSHomeDirectory();
//源路径
NSString *filePath = [homePath stringByAppendingPathComponent:@"Documents/file.text"];
//目标路径
NSString *targetPath = [homePath stringByAppendingPathComponent:@"Documents/demo/file2.text"];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL success = [fileManager moveItemAtPath:filePath toPath:targetPath error:nil];
if (!success) {
NSLog(@"移动失败");
}
//一个思考:怎么实现给移动至此的文件改名字?? Method:通过剪切,文件从当前目录移动至当前目录
*/
/*___________________________________4.复制文件_____________________________________*/
/*
//获取当前app的沙盒目录
NSString *hoemPath = NSHomeDirectory();
//源路径
NSString *filePath = [hoemPath stringByAppendingPathComponent:@"Documents/demo/file3.text"];
//目标路径
NSString *targetPath = [hoemPath stringByAppendingPathComponent:@"Documents/file.text"];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL success = [fileManager copyItemAtPath:filePath toPath:targetPath error:nil];
if (!success) {
NSLog(@"复制失败");
}
*/
/*___________________________________3.删除文件_____________________________________*/
/*
//获取当前app的沙盒目录
NSString *hoemPath = NSHomeDirectory();
//源路径
NSString *filePath = [hoemPath stringByAppendingPathComponent:@"Documents/demo/file3.text"];
NSFileManager *fileManager = [NSFileManager defaultManager];
//判断文件是否存在
BOOL fileExist = [fileManager fileExistsAtPath:filePath];
if (fileExist) {
//removeItemAtPath:删除文件.
BOOL success = [fileManager removeItemAtPath:filePath error:nil];
if (success) {
NSLog(@"删除成功");
}
*/
/*___________________________________4.获取文件的属性_____________________________________*/
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *homePath = NSHomeDirectory();
//目标路径
NSString *filePath = [homePath stringByAppendingPathComponent:@"Documents/file.text"];
//获取到文件的属性
NSDictionary *fileAttr = [fileManager attributesOfItemAtPath:filePath error:nil];
NSLog(@"%@",fileAttr);
NSNumber *fileSize = [fileAttr objectForKey:NSFileSize];
long sizeValue = [fileSize longValue];
NSLog(@"文件大小:%ld",sizeValue);
//如下读取文件的大小不可取,因为将文件中的数据全都读到内存中,文件大时,太占内存了。
//NSData *data = [fileManager contentsAtPath:filePath];
//NSInteger len = data.length;
4. 读写文件 & NSFileHandle -文件内容操作
(Attention:NSFileHandle区别NSFileManager(主要对目录操作),NSFileHandle(主要对文件内容操作))
/*_______________________________NSString读、写文件__________________________________________*/
/*
//1.NSString写文件
NSString *s = @"自动化测试部门";
//文件路径
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/filetext"];
//将字符串写入文件
BOOL success = [s writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
if (success) {
NSLog(@"字符串写入成功");
}
//2.NSString读文件
//创建字符串时同时读取文件路径对应的文件中的内容
NSString *string = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSLog(@"string=%@",string);
*/
/*_______________________________NSData读、写文件__________________________________________*/
/*
//1.NSData读文件
//文件路径
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/file.text"];
//创建NSData时,同时读取文件中的内容
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",string);
//2.NSData写文件
//[data writeToFile:<#(nonnull NSString *)#> atomically:<#(BOOL)#>]
*/
/*
注意:NSArray、NSDictionary 中只能存放NSNumber、NSString、NSData、NSDate、NSArray、NSDictionary
才能成功写入文件、写入文件我们成之为“属性列表文件”
*/
/*_______________________________NSArray读、写文件__________________________________________*/
//1.NSArray写文件
/*
NSString *s1 = @"zhangsan";
NSString *s2 = @"李四";
//文件路径
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/array.plist"];
NSLog(@"path:%@",path);
NSArray *array = [[NSArray alloc] initWithObjects:s1,s2, nil];
BOOL success = [array writeToFile:path atomically:YES];
if (success) {
NSLog(@"写入成功");
}
*/
//数组、字典存入能存入NSNumber、NSData、NSDate、NSArray、NSDictionary以外的对象,则无法写入文件
/*
Person *p = [[Person alloc] init];
NSArray *array2 = [NSArray arrayWithObjects:p,@"demo", nil];
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/array2.plist"];
BOOL success2 = [array2 writeToFile:path atomically:YES];
if (!success2) {
NSLog(@"写入失败");
}
*/
/*
//2.NSArray读文件
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/array.plist"];
// NSString *path1 = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Property List.plist"];
NSArray *readArray = [[NSArray alloc] initWithContentsOfFile:path];
for (NSString *s in readArray) {
NSLog(@"s = %@",s);
}
*/
/*_______________________________NSDictionary读、写文件__________________________________________*/
//1.NSDictionary写入文件
NSDictionary *dic = @{
@"name":@"jack",
@"birthday":[NSDate date],
@"age":@22
};
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/dic.plist"];
BOOL success = [dic writeToFile:path atomically:YES];
if (success) {
NSLog(@"写入成功");
}
//2.NSDictionary读文件
NSDictionary *readDic = [NSDictionary dictionaryWithContentsOfFile:path];
NSLog(@"readDic:%@",readDic);
5. 追加数据与定位读取
/*_____________________________________1.追加数据_____________________________________*/
/*
NSString *s = @"MLB-AE-SW";
//当前登陆用户的主目录
NSString *homePath = NSHomeDirectory();
NSString *path = [homePath stringByAppendingPathComponent:@"file.text"];
//写入文件
[s writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
*/
/*
NSString *homePath = NSHomeDirectory();
NSString *path = [homePath stringByAppendingPathComponent:@"file.text"];
//创建一个写入的NSFileHandle对象
NSFileHandle *writeHandle = [NSFileHandle fileHandleForWritingAtPath:path];
//将文件的偏移量设置到末尾,写入文件时则从末尾开始写入
[writeHandle seekToEndOfFile];
NSString *appendString = @"追加的数据";
NSData *data = [appendString dataUsingEncoding:NSUTF8StringEncoding];
//从当前偏移量开始写入数据
[writeHandle writeData:data];
//关闭文件
[writeHandle closeFile];
*/
/*_____________________________________2.定位读取_____________________________________*/
//当前登陆用户主目录
NSString *homePath = NSHomeDirectory();
NSString *path = [homePath stringByAppendingPathComponent:@"Documents/file.text"];
//通过NSFileManager获取文件大小
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *fileAttr = [fileManager attributesOfItemAtPath:path error:nil];
NSNumber *fileSize = [fileAttr objectForKey:NSFileSize];
long long sizeValue = [fileSize longLongValue];
NSFileHandle *readHandle = [NSFileHandle fileHandleForReadingAtPath:path];
//将偏移量设置到中间位置
[readHandle seekToFileOffset:sizeValue/2];
//从当前偏移量读取到文件的末尾
NSData *data = [readHandle readDataToEndOfFile];
//NSData ---> NSString
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",string);
6. NSFileHandle实现复制文件的功能
NSString *homePath = NSHomeDirectory();
NSString *srcPath = [homePath stringByAppendingPathComponent:@"06 第六课 文件管理.pdf"];
//目标文件路径
NSString *targetPath = [homePath stringByAppendingPathComponent:@"Documents/06 第六课 文件管理.pdf"];
/*
注意:使用NSFileHandle只能读写译经存在的文件,不能创建文件
使用NSFileManager创建文件
*/
NSFileManager *fileManager = [NSFileManager defaultManager];
//创建目标文件
BOOL success = [fileManager createFileAtPath:targetPath contents:nil attributes:nil];
if (success) {
NSLog(@"目标文件创建成功!");
}
//创建用于读取文件的NSFileHandle对象
NSFileHandle *readHandle = [NSFileHandle fileHandleForReadingAtPath:srcPath];
//创建用于写入的NSFileHandle对象
NSFileHandle *writerHande = [NSFileHandle fileHandleForWritingAtPath:targetPath];
//从当前偏移量读到文件的末尾,偏移量默认是起始位置
//NSData *data = [readHandle readDataToEndOfFile];
//同上
NSData *data = [readHandle availableData]; //缺陷:每次读取文件全部内容(当文件很大时,程序就会crash)
//解决方式:一次读几个字节,一段一段的读.
//将数据写入目标文件
[writerHande writeData:data];
//关闭文件
[readHandle closeFile];
[writerHande closeFile];
iOS - 文件操作(File Operating)的更多相关文章
- IOS文件操作的两种方式:NSFileManager操作和流操作
1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...
- JAVASE02-Unit06: 文件操作——File 、 文件操作—— RandomAccessFile
Unit06: 文件操作--File . 文件操作-- RandomAccessFile java.io.FileFile的每一个实例是用来表示文件系统中的一个文件或目录 package day06; ...
- iOS——文件操作NSFileManager (创建、删除,复制,粘贴)
iOS——文件操作NSFileManager (创建.删除,复制,粘贴) iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视 ...
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
c#中@标志的作用 参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...
- python的文件操作file:(内置函数,如seek、truncate函数)
file打开文件有两种方式,函数用file()或者open().打开后读入文件的内容用read()函数,其读入是从文件当前指针位置开始,所以需要控制指针位置用: 一.先介绍下file读入的控制函数: ...
- 【转载】C#工具类:实现文件操作File的工具类
在应用程序的开发中,文件操作的使用基本上是必不可少的,FileStream类.StreamWriter类.Directory类.DirectoryInfo类等都是文件操作中时常涉及到的类,我们可以通过 ...
- PythonStudy——文件操作 File operation
# 文件:就是硬盘的一块存储空间 # 1.使用文件的三步骤: # 打开文件- 得到文件对象:找到数据存放在硬盘的位置,让操作系统持有该空间,具有操作权# 硬盘空间 被 操作系统持有# 文件对象f 被 ...
- 文件操作(FILE)与常用文件操作函数
文件 1.文件基本概念 C程序把文件分为ASCII文件和二进制文件,ASCII文件又称文本文件,二进制文件和文本文件(也称ASCII码文件)二进制文件中,数值型数据是以二进制形式存储的, 而在文本文件 ...
- Java 文件操作-File
1.File文件操作 java.io.File用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录.File类只用于表示文件(目录)的信息(名称.大小等),不能对文件的 ...
随机推荐
- 解决IntelliJ IDEA 13更新FindBugs 0.9.993时JRE版本过低导致启动失败问题
今晚更新FindBugs 0.9.992(FindBugs 2)至FindBugs 0.9.993(FindBugs 3)后,按要求重启IntelliJ IDEA 13.本想看看更新后多了哪些功能,结 ...
- glsl水包含倒影的实现(rtt) [转]
转自 http://blog.sina.com.cn/s/blog_78ea87380101eixi.html 此文实现一个简单地水面倒影效果,通过rtt相机 获取倒影纹理, 水的基本实现方法(参考前 ...
- iOS 2D绘图详解(Quartz 2D)之路径(stroke,fill,clip,subpath,blend)
Stroke-描边 影响描边的因素 线的宽度-CGContextSetLineWidth 交叉线的处理方式-CGContextSetLineJoin 线顶端的处理方式-CGContextSetLine ...
- myloader原理0
开源MySQL多线程逻辑导入工具myloader原理与改进 在上一篇中,介绍了多线程备份工具mydumper的实现及网易对其所做的优化,本篇聊聊与mydumper配合使用的myloader工具. my ...
- iOS UIButton加在window上点击无效果问题
UIButton加在window上,点击没有效果,找了很久,原来是没有加上这名:[self.window makeKeyAndVisible]; self.window = [[UIWindow al ...
- mysql索引常见问题
一:对于先建索引再插入和先插入再统一建索引效率: 对于大数量的表来说, 先加载数据再来定义全文索引的 速度要远远优于在一个已经定义好全文索引的表里面插入大量数据的速度.一定会问:这是问什么呢?其实,道 ...
- Linux shell 脚本攻略之生成任意大小的文件
摘自:<Linux shell 脚本攻略>
- 基于Qt的开源音乐播放器(CZPlayer)
CZPlayer CZPlayer是基于Qt开发的一款功能强大的音乐播放器,该播放器的论坛地址请点击here,目前CZPlayer已经是第四个版本了,历史版本也分别在我的github上, github ...
- 基于PHP的对接电子面单接口平台案例
电子面单接口目前有三种对接方式,快递电子面单接口.菜鸟电子面单接口和快递鸟电子面单接口.这三种接口各有特点. 一.电子面单接口定义 1. 快递电子面单接口:快递公司自己开发的电子面单服务, 商家使用必 ...
- BeanDefinitionRegistry extends AliasRegistry
// 用该Registry注册一个新定义的bean,但是新的bean必须支持父的定义和子的定义void registerBeanDefinition(String beanName, BeanDefi ...