ios文件读写 (转自我同学)

通过NSHomeDrietory获取文件路径

NSString*homeD=NSHomeDrietory();//获取Home路径

NSString*fileD=[homeDstringByAppendingPathComponent:@"temp/xxx.xxx"];

这样可以获取xxx的完整路径了

_________________________________________________________________________________________________

使用NSSearchPathForDirectoriesInDomains获取指定路径

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString*documentsDirectory=[pathsobjectAtIndex:0];需要的路径

NSString*fileD=[documentSDirectorystringByAppendingPathComponent:@"xxx.txt"];

________________________________________________________________________________________________

NSSearchPathForDirectoriesInDomains具体检索一个子文件夹

NSDocumentDirectory这个是个常量根类中的枚举变量吧,代表要查找的路径document

也可以使用NSCachesDirectory书名路径为Caches

NSUserDomainMask这个指定了文件的检索范围只在沙箱内部

最后YES指定了是否展开波浪线;在MAC系统中~代表主路径(Home)如果不展开路径就如~/Document如果展开就是完整的路径一般都设为YES

_________________________________________________________________________________________________

使用NSTemportryDirectory获取临时文件的全路径

NSString*temD=NSTemportryDirectory();

NSString*fileD=[temDstringByAppendingPathComponent:@"xxx.txt"];

NSLog(@"%@",temD);

创建新文件

-(BOOL)createFileAtPath:(NSString*)pathcontents:(NSData*)dataattributes:(NSDictionary*)attr;

要创建文件夹第一个参数就是他的全路径了,第二个是文件的内容,最后一个文件的属性

返回值为创建成功与失败

创建路径

-(Void)createDirectoryAtPath:(NSString*)pathattributes:(NSDictionary)attr;

创建路径跟文件差不多

删除文件

-(BOOL)removeFileAtPath:(NSString*)pathhandler:(id)handler;

调用删除文件的函数需要指定全路径并且制定handler来执行flieManager:willProcessPathfileManager:shouldProceedAfterError回调函数也可以吧handler置为nil这样删除文件出错的时候会终止操作并返回NO

写入数据:

//获取文件路径

NSString*path=[documentsDirectorystringByAppendingPathComponent:@"fileName"];

NSString*temp=@"Helloworld";

inta=1;

//创建数据缓冲

NSMutableData*writer=[[NSMutableDataalloc]init];

//将字符串添加到缓冲中

[writerappendData:[tempdataUsingEncoding:NSUTF8StringEncoding]];

//将其他数据添加到缓冲中

[writerappendBytes:&alength:sizeof(a)];

//将缓冲的数据写入到文件中

[writerwriteToFile:pathatomically:YES];

[writerrelease];



读取数据:

inta;

Floatb;

NSString*str;

NSData*reader=[NSDatadataWithContentsOfFile:path];

str=[[NSStringalloc]initWithData:[readersubdataWithRange:NSMakeRange(0,[templength])]

encoding:NSUTF8StringEncoding];

[readergetBytes:&arange:NSMakeRange([templength],sizeof(a)];

[readergetBytes:&strrange:NSMakeRange([templength]+sizeof(a),sizeof(b))];

NSLog(@"a:%@b:%istr:%f",a,b,str);

读取工程中的文件:

读取数据时,要看待读取的文件原有的文件格式,是字节码还是文本,我经常需要重文件中读取字节码,所以我写的是读取字节文件的方式。

//用于存放数据的变量,因为是字节,所以是UInt8

UInt8b=0;

//获取文件路径

NSString*path=[[NSBundlemainBundle]pathForResource:@"fileName"ofType:@""];


//获取数据

NSData*reader=[NSDatadataWithContentsOfFile:path];

//获取字节的个数

intlength=[readerlength];

NSLog(@"------->bytesLength:%d",length);

for(inti=0;i<length;i++)

{

//读取数据

[readergetBytes:&brange:NSMakeRange(i,sizeof(b))];

NSLog(@"-------->data%d:%d",i,b);

}

实例

@implementationManagerFile

-(void)writeFile:(NSString*)file{

//创建文件管理器

NSFileManager*fileManager=[NSFileManagerdefaultManager];

//获取路径

//参数NSDocumentDirectory要获取那种路径

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString*documentsDirectory=[pathsobjectAtIndex:0];//去处需要的路径

//更改到待操作的目录下

[fileManagerchangeCurrentDirectoryPath:[documentsDirectorystringByExpandingTildeInPath]];

//创建文件fileName文件名称,contents文件的内容,如果开始没有内容可以设置为nilattributes文件的属性,初始为nil

//获取文件路径

[fileManagerremoveItemAtPath:@"username"error:nil];

NSString*path=[documentsDirectorystringByAppendingPathComponent:@"username"];

//创建数据缓冲NSMutableData*writer=[[NSMutableDataalloc]init];

//将字符串添加到缓冲中

[writerappendData:[filedataUsingEncoding:NSUTF8StringEncoding]];

//将其他数据添加到缓冲中

//将缓冲的数据写入到文件中

[writerwriteToFile:pathatomically:YES];

[writerrelease];

}

-(NSString*)readFile{

//创建文件管理器

NSFileManager*fileManager=[NSFileManagerdefaultManager];

//获取路径

//参数NSDocumentDirectory要获取那种路径

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString*documentsDirectory=[pathsobjectAtIndex:0];//去处需要的路径

//更改到待操作的目录下

[fileManagerchangeCurrentDirectoryPath:[documentsDirectorystringByExpandingTildeInPath]];

//获取文件路径

NSString*path=[documentsDirectorystringByAppendingPathComponent:@"username"];

NSData*reader=[NSDatadataWithContentsOfFile:path];

return[[NSStringalloc]initWithData:readerencoding:NSUTF8StringEncoding];

}

@end

对一个文件重命名

  想要重命名一个文件,我们需要把文件移到一个新的路径下。下面的代码创建了我们所期望的目标文件的路径,然后请求移动文件以及在移动之后显示文件目录。

//通过移动该文件对文件重命名

NSString*filePath2=[documentsDirectory

stringByAppendingPathComponent:@"file2.txt"];

//判断是否移动

if([fileMgrmoveItemAtPath:filePathtoPath:filePath2error:&error]!=YES)

NSLog(@"Unabletomovefile:%@",[errorlocalizedDescription]);

//显示文件目录的内容

NSLog(@"Documentsdirectory:%@",

[fileMgrcontentsOfDirectoryAtPath:documentsDirectoryerror:&error]);

__________________________________________________________________________________

获取一个目录内的文件及文件夹列表。

NSFileManager*fileManager=[NSFileManagerdefaultManager];

//在这里获取应用程序Documents文件夹里的文件及文件夹列表

NSArray*documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString*documentDir=[documentPathsobjectAtIndex:0];

NSError*error=nil;

NSArray*fileList=[[NSArrayalloc]init];

//fileList便是包含有该文件夹下所有文件的文件名及文件夹名的数组

fileList=[fileManagercontentsOfDirectoryAtPath:documentDirerror:&error];

以下这段代码则可以列出给定一个文件夹里的所有子文件夹名

NSMutableArray*dirArray=[[NSMutableArrayalloc]init];

BOOLisDir=NO;

//在上面那段程序中获得的fileList中列出文件夹名

for(NSString*fileinfileList){

NSString*path=[documentDirstringByAppendingPathComponent:file];

[fileManagerfileExistsAtPath:pathisDirectory:(&isDir)];

if(isDir){

[dirArrayaddObject:file];

}

isDir=NO;

}

NSLog(@"EveryThinginthedir:%@",fileList);

NSLog(@"Allfolders:%@",dirArray);


你可能感兴趣的:(文件读写)