OC学习--文件操作
2015-06-16 20:53
459 查看
OC中文件的操作可以分为两类:
(1)文件本省的操作:创建、删除、移动、拷贝等
(2)文件内容的操作:读、写等
|| 读: 磁盘——>内存
|| 写:内存——>磁盘
要想学会OC中的文件操作,我们就要学会两个类:
NSFileManager(文件管理类)
NSFileHandle(文件句柄类)
一、NSFileManager
1、创建文件管理器单利对象
NSFileManager *fm = [NSFileManagerdefaultManager];
2、遍历目录下内容
//浅度遍历指定目录
NSError * __autoreleasing error =nil;
NSArray *ary = [fmcontentsOfDirectoryAtPath:@"PATH"error:&error];
//该方法若出错会创建一个NSError类型的对象,然后用传递过来的error指针指向该对象
if (error) {
NSLog(@"%@", error);
}
//深度遍历指定目录
NSArray *ary2 = [fmsubpathsOfDirectoryAtPath:PATHerror:nil];
NSArray *ary2 = [fm subpathsAtPath:PATH];
3、创建文件或者目录
//创建文件,若创建的文件已存在,则会覆盖
BOOL ret = [fm
createFileAtPath:PATHcontents:nilattributes:nil];
//创建文件夹,若文件夹已经存在,则不会覆盖
/*
参数1:创建的目录
参数2:是否创建中间目录
参数3:要创建的目录的属性
参数4:出错处理
*/
ret = [fm createDirectoryAtPath:PATH2withIntermediateDirectories:YESattributes:nilerror:nil];
if (ret == YES) {
NSLog(@"目录创建成功");
} else {
NSLog(@"目录创建失败");
}
4、拷贝文件或者目录
//拷贝文件或目录
BOOL ret = [fm
copyItemAtPath:SRCtoPath:DSTerror:nil];
if (ret == YES) {
NSLog(@"拷贝成功");
} else {
NSLog(@"拷贝失败");
}
5、移动文件或者目录
BOOL ret = [fm
moveItemAtPath:SRCtoPath:DSTerror:nil];
if (ret == YES) {
NSLog(@"移动成功");
} else {
NSLog(@"移动失败");
}
6.删除文件或者目录
BOOL ret = [fm
removeItemAtPath:PATHerror:nil];
7、获取文件属性
NSDictionary *attr = [fmattributesOfItemAtPath:PATH2error:nil];
8、判断文件是否存在
ret = [fm fileExistsAtPath:PATH2];
9、判断文件是否存在,是否是目录
BOOL isDir = NO;
ret = [fm fileExistsAtPath:PATH2isDirectory:&isDir];
二、NSFileHandle
1、打开文件方式(默认位置在文件的开头)
//已只读方式打开文件
NSFileHandle *fh = [NSFileHandlefileHandleForReadingAtPath:PATH];
//以只写方式打开文件
NSFileHandle *fh2 = [NSFileHandlefileHandleForWritingAtPath:PATH];
//以读写方式打开
NSFileHandle *fh3 = [NSFileHandlefileHandleForUpdatingAtPath:PATH];
2、从当前偏移量读到文件尾
NSData *data = [fhreadDataToEndOfFile];
3、读取制定长度的数据(单位是字节)
NSData *data = [fh
readDataOfLength:5];
4、设置文件的偏移量(单位字节)
[fh seekToFileOffset:10];
5、设置文件偏移量之文件尾
[fh seekToEndOfFile];
6、将文件的长度设置为offset大小(截断文件)
[fh3 truncateFileAtOffset:20];
7、将数据写入到文件
[fh2 writeData:data];
练习题、:
编写一个程序,将一个目录下的文件分类管理
a、用每个文件的后缀创建对应全大写目录,将同类文件移动到对应的目录。
如:1.txt文件,创建TXT目录,将1.txt移动到该目录
b、将没有后缀的文件移动到Others目录
c、将目录移动到subDir目录中
#import "JYFileManager.h"
@implementation JYFileManager
{
NSMutableArray *_contents;
NSString *_path;
}
- (instancetype)initWithPath:(NSString *)path
{
if (self = [superinit]) {
_path = path;
_contents = [[NSMutableArrayalloc]
init];
}
return
self;
}
- (void)moveDirectory:(NSString *)name
{
NSFileManager *fm = [NSFileManagerdefaultManager];
//1、创建subDir目录
NSString *subDir = [_pathstringByAppendingPathComponent:@"subDir"];
[fm createDirectoryAtPath:subDirwithIntermediateDirectories:YESattributes:nilerror:nil];
//2、拼接原路径和目标路径
NSString *src = [_pathstringByAppendingPathComponent:name];
NSString *dst = [subDirstringByAppendingPathComponent:name];
[fm moveItemAtPath:srctoPath:dst
error:nil];
}
- (void)moveFile:(NSString *)name
{
NSArray *ary = [namecomponentsSeparatedByString:@"."];
NSFileManager *fm = [NSFileManagerdefaultManager];
if (ary.count ==1) {
//没有后缀
NSString *others = [_pathstringByAppendingPathComponent:@"Others"];
[fm createDirectoryAtPath:otherswithIntermediateDirectories:YESattributes:nilerror:nil];
NSString *src = [_pathstringByAppendingPathComponent:name];
NSString *dst = [others
stringByAppendingPathComponent:name];
[fmmoveItemAtPath:src
toPath:dst error:nil];
}else {
//有后缀
NSString *dir = [[ary
lastObject] uppercaseString];
NSString *DIR = [_pathstringByAppendingPathComponent:dir];
[fm createDirectoryAtPath:DIRwithIntermediateDirectories:YESattributes:nilerror:nil];
NSString *src = [_pathstringByAppendingPathComponent:name];
NSString *dst = [DIRstringByAppendingPathComponent:name];
[fmmoveItemAtPath:src
toPath:dst error:nil];
}
}
- (void)archiveFileAtPath
{
//1、创建文件管理类的对象
NSFileManager *fm = [NSFileManagerdefaultManager];
//2、浅度遍历,保存到数组
_contents.array = [fmcontentsOfDirectoryAtPath:_patherror:nil];
//3、循环遍历数组
for (NSString *strin
_contents) {
unichar ch = [str
characterAtIndex:0];
if (ch ==
'.') {
continue;
}
//NSString *path = [_path stringByAppendingFormat:@"/%@", str];
NSString *path = [_pathstringByAppendingPathComponent:str];
//判断是否是目录
BOOL isDir =
NO;
[fmfileExistsAtPath:path
isDirectory:&isDir];
if (isDir ==
YES) {
//4-1、是目录
[selfmoveDirectory:str];
}else {
//4-2、是文件
[selfmoveFile:str];
}
}
}
+ (void)archiveFileAtPath:(NSString *)path
{
NSFileManager *fm = [NSFileManagerdefaultManager];
BOOL isDir =
NO;
BOOL isExist = [fm
fileExistsAtPath:path
isDirectory:&isDir];
if (isExist ==
NO) {
NSLog(@"有木有搞错,不存在咋整啊");
return;
}else {
if (isDir ==
NO) {
NSLog(@"知不知道什么是目录");
return;
}
}
//若是一个目录则执行以下代码
JYFileManager *myFm = [[JYFileManageralloc]
initWithPath:path];
[myFm archiveFileAtPath];
}
@end
======main====
#define PATH @"/Users/qianfeng001/Desktop/test"
int main(int argc,const
char * argv[]) {
@autoreleasepool {
[JYFileManagerarchiveFileAtPath:PATH];
}
return
0;
}
========运行前=========
========运行后=========
(1)文件本省的操作:创建、删除、移动、拷贝等
(2)文件内容的操作:读、写等
|| 读: 磁盘——>内存
|| 写:内存——>磁盘
要想学会OC中的文件操作,我们就要学会两个类:
NSFileManager(文件管理类)
NSFileHandle(文件句柄类)
一、NSFileManager
1、创建文件管理器单利对象
NSFileManager *fm = [NSFileManagerdefaultManager];
2、遍历目录下内容
//浅度遍历指定目录
NSError * __autoreleasing error =nil;
NSArray *ary = [fmcontentsOfDirectoryAtPath:@"PATH"error:&error];
//该方法若出错会创建一个NSError类型的对象,然后用传递过来的error指针指向该对象
if (error) {
NSLog(@"%@", error);
}
//深度遍历指定目录
NSArray *ary2 = [fmsubpathsOfDirectoryAtPath:PATHerror:nil];
NSArray *ary2 = [fm subpathsAtPath:PATH];
3、创建文件或者目录
//创建文件,若创建的文件已存在,则会覆盖
BOOL ret = [fm
createFileAtPath:PATHcontents:nilattributes:nil];
//创建文件夹,若文件夹已经存在,则不会覆盖
/*
参数1:创建的目录
参数2:是否创建中间目录
参数3:要创建的目录的属性
参数4:出错处理
*/
ret = [fm createDirectoryAtPath:PATH2withIntermediateDirectories:YESattributes:nilerror:nil];
if (ret == YES) {
NSLog(@"目录创建成功");
} else {
NSLog(@"目录创建失败");
}
4、拷贝文件或者目录
//拷贝文件或目录
BOOL ret = [fm
copyItemAtPath:SRCtoPath:DSTerror:nil];
if (ret == YES) {
NSLog(@"拷贝成功");
} else {
NSLog(@"拷贝失败");
}
5、移动文件或者目录
BOOL ret = [fm
moveItemAtPath:SRCtoPath:DSTerror:nil];
if (ret == YES) {
NSLog(@"移动成功");
} else {
NSLog(@"移动失败");
}
6.删除文件或者目录
BOOL ret = [fm
removeItemAtPath:PATHerror:nil];
7、获取文件属性
NSDictionary *attr = [fmattributesOfItemAtPath:PATH2error:nil];
8、判断文件是否存在
ret = [fm fileExistsAtPath:PATH2];
9、判断文件是否存在,是否是目录
BOOL isDir = NO;
ret = [fm fileExistsAtPath:PATH2isDirectory:&isDir];
二、NSFileHandle
1、打开文件方式(默认位置在文件的开头)
//已只读方式打开文件
NSFileHandle *fh = [NSFileHandlefileHandleForReadingAtPath:PATH];
//以只写方式打开文件
NSFileHandle *fh2 = [NSFileHandlefileHandleForWritingAtPath:PATH];
//以读写方式打开
NSFileHandle *fh3 = [NSFileHandlefileHandleForUpdatingAtPath:PATH];
2、从当前偏移量读到文件尾
NSData *data = [fhreadDataToEndOfFile];
3、读取制定长度的数据(单位是字节)
NSData *data = [fh
readDataOfLength:5];
4、设置文件的偏移量(单位字节)
[fh seekToFileOffset:10];
5、设置文件偏移量之文件尾
[fh seekToEndOfFile];
6、将文件的长度设置为offset大小(截断文件)
[fh3 truncateFileAtOffset:20];
7、将数据写入到文件
[fh2 writeData:data];
练习题、:
编写一个程序,将一个目录下的文件分类管理
a、用每个文件的后缀创建对应全大写目录,将同类文件移动到对应的目录。
如:1.txt文件,创建TXT目录,将1.txt移动到该目录
b、将没有后缀的文件移动到Others目录
c、将目录移动到subDir目录中
#import "JYFileManager.h"
@implementation JYFileManager
{
NSMutableArray *_contents;
NSString *_path;
}
- (instancetype)initWithPath:(NSString *)path
{
if (self = [superinit]) {
_path = path;
_contents = [[NSMutableArrayalloc]
init];
}
return
self;
}
- (void)moveDirectory:(NSString *)name
{
NSFileManager *fm = [NSFileManagerdefaultManager];
//1、创建subDir目录
NSString *subDir = [_pathstringByAppendingPathComponent:@"subDir"];
[fm createDirectoryAtPath:subDirwithIntermediateDirectories:YESattributes:nilerror:nil];
//2、拼接原路径和目标路径
NSString *src = [_pathstringByAppendingPathComponent:name];
NSString *dst = [subDirstringByAppendingPathComponent:name];
[fm moveItemAtPath:srctoPath:dst
error:nil];
}
- (void)moveFile:(NSString *)name
{
NSArray *ary = [namecomponentsSeparatedByString:@"."];
NSFileManager *fm = [NSFileManagerdefaultManager];
if (ary.count ==1) {
//没有后缀
NSString *others = [_pathstringByAppendingPathComponent:@"Others"];
[fm createDirectoryAtPath:otherswithIntermediateDirectories:YESattributes:nilerror:nil];
NSString *src = [_pathstringByAppendingPathComponent:name];
NSString *dst = [others
stringByAppendingPathComponent:name];
[fmmoveItemAtPath:src
toPath:dst error:nil];
}else {
//有后缀
NSString *dir = [[ary
lastObject] uppercaseString];
NSString *DIR = [_pathstringByAppendingPathComponent:dir];
[fm createDirectoryAtPath:DIRwithIntermediateDirectories:YESattributes:nilerror:nil];
NSString *src = [_pathstringByAppendingPathComponent:name];
NSString *dst = [DIRstringByAppendingPathComponent:name];
[fmmoveItemAtPath:src
toPath:dst error:nil];
}
}
- (void)archiveFileAtPath
{
//1、创建文件管理类的对象
NSFileManager *fm = [NSFileManagerdefaultManager];
//2、浅度遍历,保存到数组
_contents.array = [fmcontentsOfDirectoryAtPath:_patherror:nil];
//3、循环遍历数组
for (NSString *strin
_contents) {
unichar ch = [str
characterAtIndex:0];
if (ch ==
'.') {
continue;
}
//NSString *path = [_path stringByAppendingFormat:@"/%@", str];
NSString *path = [_pathstringByAppendingPathComponent:str];
//判断是否是目录
BOOL isDir =
NO;
[fmfileExistsAtPath:path
isDirectory:&isDir];
if (isDir ==
YES) {
//4-1、是目录
[selfmoveDirectory:str];
}else {
//4-2、是文件
[selfmoveFile:str];
}
}
}
+ (void)archiveFileAtPath:(NSString *)path
{
NSFileManager *fm = [NSFileManagerdefaultManager];
BOOL isDir =
NO;
BOOL isExist = [fm
fileExistsAtPath:path
isDirectory:&isDir];
if (isExist ==
NO) {
NSLog(@"有木有搞错,不存在咋整啊");
return;
}else {
if (isDir ==
NO) {
NSLog(@"知不知道什么是目录");
return;
}
}
//若是一个目录则执行以下代码
JYFileManager *myFm = [[JYFileManageralloc]
initWithPath:path];
[myFm archiveFileAtPath];
}
@end
======main====
#define PATH @"/Users/qianfeng001/Desktop/test"
int main(int argc,const
char * argv[]) {
@autoreleasepool {
[JYFileManagerarchiveFileAtPath:PATH];
}
return
0;
}
========运行前=========
========运行后=========
相关文章推荐
- oc 的一些概念
- [代码例程] iPhone开发入门(7)--- 从C/C++语言到Objective-C语
- IOS 面试习题 Object-C
- objective-c block 讲解
- IOS求职之OC面试题
- iOS OC和Swift混编
- OC_继承,初始化
- OC 省市区划分
- iOS开发 — Quartz 2D知识点应用 (制作了一个Demo,源代码)
- 编写 Objective-C 代码/掌握基本的编程技能 之 读后笔记
- Objective-C关键字self和super详解
- c语言入门(一)
- c语言入门(三)分支结构
- c语言入门(四)循环
- c语言入门(八)结构体
- c语言入门(七)函数
- 关于TCBlobDownload中续传的问题
- 将汉字转成GB2312放进网址进行请求
- Objective-C NSString--(2)
- 黑马程序员---oc 协议和代理