ios 之文件操作NSFileMange和NSFileHandle

来源:互联网 发布:string数组倒序 编辑:程序博客网 时间:2024/05/22 12:06

一、NSFileManager  文件/文件夹 的操作


NSFileManager 用于对文件或目录(文件夹)管理的单例类。


文件管理类的实例化方法 例如:


 NSFileManager *fm=[NSFileManager defaultManager];



fileExistsAtPath 用于判断文件是否存在 例如:


BOOL ret=[fm fileExistsAtPath:@"/Users/kingkong/Desktop/Test/test.txt"];



createFileAtPath 用于创建文件 第一个参数是文件名,第二个参数是文件的初始值,第三个参数是文件的属性 例如:


 BOOL ret=[fm createFileAtPath:@"/Users/kingkong/Desktop/Test/test.txt" contents:nil attributes:nil];



copyItemAtPath 用于复制文件:将某一个文件复制成另一个文件,第三个参数:回调错误信息 例如:



  NSError *error=nil;//用于接收错误信息

  NSString  *curpath=@"/Users/kingkong/Desktop/Test/test.txt”;

  NSString  *topath=@"/Users/kingkong/Desktop/Test/test2.txt”;

  ret=[fm copyItemAtPath: curpath  toPath: topath  error:&error];

  if(error!=nil){

        NSLog(@"error:%@",[error userInfo]);

      }




moveItemAtPath 用于移动/重命名文件;将某个路径下的文件移动到另一个路径下的文件(目标路径一定要指定文件名),


如果源路径与目   标路径下的文件名不同,同时重命名 例如:


 NSString  *curpath=@"/Users/kingkong/Desktop/Test/test.txt”;


 NSString  *topath=@"/Users/kingkong/Desktop/Test/test2.txt”;


[fm moveItemAtPath: curpath toPath: topath error:nil];



attributesOfItemAtPath 获取文件的属性 例如:



 NSString  *curpath=@"/Users/kingkong/Desktop/Test/test.txt";


 NSDictionary *dict= [fm attributesOfItemAtPath: curpath error:nil];


 //获取属性字典中该文件的大小


 NSLog(@"size:%@",[dict objectForKey:NSFileSize]);


removeItemAtPath 用于删除指定路径下的文件 例如:


 NSString  *path=@"/Users/kingkong/Desktop/Test/test.txt”;


 BOOL ret=[fm removeItemAtPath: path error:nil];



NSData:当对文件操作(写数据到文件和从文件中读数据)和从网络上获取数据,需要将数据转换为纯粹的二进制形式,


NSData就是二进制形式的缓存对象,相当于C中的char buf[255] 例如:


 NSString  *path=@"/Users/kingkong/Desktop/Test/test.txt”;


 NSData *content=[fm contentsAtPath: path];



NSData数据转换为NSString类型数据 例如:


  //NSData---->NSString,将NSData对象转换为字符串


 NSString *scontent=[[NSString alloc]initWithData:content  encoding:NSUTF8StringEncoding];



NSString类型的数据转换为NSData数据 例如:


 NSString *str=@"hello China!";


 //NSString---->NSData;将字符串转换为NSData数据(写入文件或传输到网络上)


NSData *data2=[strdataUsingEncoding:NSUTF8StringEncoding];



createFileAtPath … contents 建文件并指定写入内容 例如:


 NSString  *path=@"/Users/kingkong/Desktop/Test/test.txt”;


[fm createFileAtPath:path contents:data2  attributes:nil];



fileExistsAtPath… isDirectory 判断目录是否存在(在文件/目录存在的情况下,通过第二个参数获取是否是目录/文件) 例如:


 BOOL isDir;//可能结果有:-1,0,1


 NSString  *path=@"/Users/kingkong/Desktop/Test/test.txt”;


BOOL ret=[fm fileExistsAtPath:path isDirectory:&isDir];



contentsOfDirectoryAtPath 浅遍历:获取目录下的子目录和文件名 例如:


 NSString  *path=@"/Users/kingkong/Desktop/Test”;


 NSArray *array=[fm contentsOfDirectoryAtPath: path error:nil];


 NSLog(@"array%@",array);



subpathsAtPath  深遍历:获取目录下所有的内容(包括子目录下的所有的内容) 例如:


 NSString  *path=@"/Users/kingkong/Desktop/Test”;


 NSArray *array2=[fm subpathsAtPath:path];


 NSLog(@"array2:%@",array2);



currentDirectoryPath 获取当前应用程序所在目录 例如:


1NSString* currentPath=[fm currentDirectoryPath];


 NSLog(@"%@",currentPath);


createDirectoryAtPath… withIntermediateDirectories  创建目录,第一个参数是目录名,第二个参数是


当目录不存在时是否需要创建其上一级不存在的目录(中间目录)


 NSString  *path=@"/Users/kingkong/Desktop/Test/File”;


 BOOL ret=[fm createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];


参考:https://www.cnblogs.com/ChinaKingKong/p/4639431.html


二.**********NSFileHandle

常用处理方法

+ (id)fileHandleForReadingAtPath:(NSString *)path  打开一个文件准备读取

+ (id)fileHandleForWritingAtPath:(NSString *)path  打开一个文件准备写入

+ (id)fileHandleForUpdatingAtPath:(NSString *)path  打开一个文件准备更新

-  (NSData *)availableData; 从设备或通道返回可用的数据

-  (NSData *)readDataToEndOfFile; 从当前的节点读取到文件的末尾

-  (NSData *)readDataOfLength:(NSUInteger)length; 从当前节点开始读取指定的长度数据

-  (void)writeData:(NSData *)data; 写入数据

-  (unsigned long long)offsetInFile;  获取当前文件的偏移量

-  (void)seekToFileOffset:(unsigned long long)offset; 跳到指定文件的偏移量

-  (unsigned long long)seekToEndOfFile; 跳到文件末尾

-  (void)truncateFileAtOffset:(unsigned long long)offset; 将文件的长度设为offset字节

-  (void)closeFile;  关闭文件

向文件追加数据

NSString *homePath  = NSHomeDirectory( );

NSString *sourcePath = [homePath stringByAppendingPathConmpone:@"testfile.text"];

NSFileHandle *fielHandle = [NSFileHandle fileHandleForUpdatingAtPath:sourcePath];

[fileHandle seekToEndOfFile];  将节点跳到文件的末尾

NSString *str = @"追加的数据"

NSData* stringData  = [str dataUsingEncoding:NSUTF8StringEncoding];

[fileHandle writeData:stringData]; 追加写入数据

[fileHandle closeFile];

定位数据

NSFileManager *fm = [NSFileManager defaultManager];

NSString *content = @"abcdef";

[fm createFileAtPath:path contents:[content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];

NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:path];

NSUInteger length = [fileHandle availabelData] length]; 获取数据长度

[fileHandle seekToFileOffset;length/2]; 偏移量文件的一半

NSData *data = [fileHandle readDataToEndOfFile];

[fileHandle closeFile];

复制文件

NSFileHandle *infile, *outfile; 输入文件、输出文件

NSData *buffer; 读取的缓冲数据

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *homePath = NSHomeDirectory( );

NSString *sourcePath = [homePath stringByAppendingPathComponent:@"testfile.txt"];  源文件路径

NSString *outPath = [homePath stringByAppendingPathComponent:@"outfile.txt"]; 输出文件路径

BOOL sucess  = [fileManager createFileAtPath:outPath contents:nil attributes:nil];

if (!success)

{

return N0;

}

infile = [NSFileHandle fileHandleForReadingAtPath:sourcePath]; 创建读取源路径文件

if (infile == nil)

{

return NO;

}

outfile = [NSFileHandle fileHandleForReadingAtPath:outPath]; 创建并打开要输出的文件

if (outfile == nil)

{

return NO;

}

[outfile truncateFileAtOffset:0]; 将输出文件的长度设为0

buffer = [infile readDataToEndOfFile];  读取数据

[outfile writeData:buffer];  写入输入

[infile closeFile];        关闭写入、输入文件

[outfile closeFile];

参考:http://www.jianshu.com/p/d49a00200586

原创粉丝点击