900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > (0053)iOS开发之沙盒(sandbox)机制和文件操作(三)

(0053)iOS开发之沙盒(sandbox)机制和文件操作(三)

时间:2022-05-30 21:36:55

相关推荐

(0053)iOS开发之沙盒(sandbox)机制和文件操作(三)

1、在Documents里创建目录

创建一个叫test的目录,先找到Documents的目录,

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*documentsDirectory=[pathsobjectAtIndex:0];NSLog(@"documentsDirectory%@",documentsDirectory);NSFileManager*fileManager=[NSFileManagerdefaultManager];NSString*testDirectory=[documentsDirectorystringByAppendingPathComponent:@"test"];//创建目录[fileManagercreateDirectoryAtPath:testDirectorywithIntermediateDirectories:YESattributes:nilerror:nil];

启动程序,这时候目录就创建了:

2、在test目录下创建文件

创建文件怎么办呢?接着上面的代码 testPath 要用stringByAppendingPathComponent拼接上你要生成的文件名,比如test00.txt。这样才能在test下写入文件。

testDirectory是上面代码生成的路径哦,不要忘了。我往test文件夹里写入三个文件,test00.txt ,test22.txt,text.33.txt。内容都是写入内容,write String。

实现代码如下:

NSString*testPath=[testDirectorystringByAppendingPathComponent:@"test00.txt"];NSString*testPath2=[testDirectorystringByAppendingPathComponent:@"test22.txt"];NSString*testPath3=[testDirectorystringByAppendingPathComponent:@"test33.txt"];NSString*string=@"写入内容,writeString";[fileManagercreateFileAtPath:testPathcontents:[stringdataUsingEncoding:NSUTF8StringEncoding]attributes:nil];[fileManagercreateFileAtPath:testPath2contents:[stringdataUsingEncoding:NSUTF8StringEncoding]attributes:nil];[fileManagercreateFileAtPath:testPath3contents:[stringdataUsingEncoding:NSUTF8StringEncoding]attributes:nil];看下面的图,三个文件都出来了,内容也对。

在Documents目录下创建就更简单了,不用加test就ok了

3、获取目录列里所有文件名

两种方法获取:subpathsOfDirectoryAtPath 和 subpathsAtPath

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*documentsDirectory=[pathsobjectAtIndex:0];NSLog(@"documentsDirectory%@",documentsDirectory);NSFileManager*fileManage=[NSFileManagerdefaultManager];NSString*myDirectory=[documentsDirectorystringByAppendingPathComponent:@"test"];NSArray*file=[fileManagesubpathsOfDirectoryAtPath:myDirectoryerror:nil];NSLog(@"%@",file);NSArray*files=[fileManagesubpathsAtPath:myDirectory];NSLog(@"%@",files);

获取上面刚才test文件夹里的文件名

打印结果

-06-17 23:23:19.684 IosSandbox[947:f803] fileList:(

".DS_Store",

"test00.txt",

"test22.txt",

"test33.txt"

)

-06-17 23:23:19.686 IosSandbox[947:f803] fileLit(

".DS_Store",

"test00.txt",

"test22.txt",

"test33.txt"

)

两个方法都可以,隐藏的文件也打印出来了。

4、fileManager使用操作当前目录

//创建文件管理器NSFileManager*fileManager=[NSFileManagerdefaultManager];NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*documentsDirectory=[pathsobjectAtIndex:0];//更改到待操作的目录下[fileManagerchangeCurrentDirectoryPath:[documentsDirectorystringByExpandingTildeInPath]];//创建文件fileName文件名称,contents文件的内容,如果开始没有内容可以设置为nil,attributes文件的属性,初始为nilNSString*fileName=@"testFileNSFileManager.txt";NSArray*array=[[NSArrayalloc]initWithObjects:@"helloworld",@"helloworld1",@"helloworld2",nil];[fileManagercreateFileAtPath:fileNamecontents:arrayattributes:nil];这样就创建了testFileNSFileManager.txt并把三个hello world写入文件了

changeCurrentDirectoryPath目录更改到当前操作目录时,做文件读写就很方便了,不用加上全路径

5、删除文件

接上面的代码,remove就ok了。

[fileManagerremoveItemAtPath:fileNameerror:nil];6、混合数据的读写

用NSMutableData创建混合数据,然后写到文件里。并按数据的类型把数据读出来

6.1写入数据: NSString*fileName=@"testFileNSFileManager.txt";NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*documentsDirectory=[pathsobjectAtIndex:0];//获取文件路径NSString*path=[documentsDirectorystringByAppendingPathComponent:fileName];//待写入的数据NSString*temp=@"nihao世界";intdataInt=1234;floatdataFloat=3.14f;//创建数据缓冲NSMutableData*writer=[[NSMutableDataalloc]init];//将字符串添加到缓冲中[writerappendData:[tempdataUsingEncoding:NSUTF8StringEncoding]];//将其他数据添加到缓冲中[writerappendBytes:&dataIntlength:sizeof(dataInt)];[writerappendBytes:&dataFloatlength:sizeof(dataFloat)];//将缓冲的数据写入到文件中[writerwriteToFile:pathatomically:YES];

我们看看数据怎么样了:

我们看到后面的是乱码,那是中文被转成了NSData后,还有int float的二进制

6.2读取刚才写入的数据:

//读取数据:intintData;floatfloatData=0.0;NSString*stringData;NSData*reader=[NSDatadataWithContentsOfFile:path];stringData=[[NSStringalloc]initWithData:[readersubdataWithRange:NSMakeRange(0,[templength])]encoding:NSUTF8StringEncoding];[readergetBytes:&intDatarange:NSMakeRange([templength],sizeof(intData))];[readergetBytes:&floatDatarange:NSMakeRange([templength]+sizeof(intData),sizeof(floatData))];NSLog(@"stringData:%@intData:%dfloatData:%f",stringData,intData,floatData);

打印出来的结果:

-06-17 23:51:14.723 IosSandbox[1285:f803] stringData:nihao hello! intData:1234332 floatData:3.140000

这里把写入的汉字改成了 hello。因为[templength]算长度是,把中文算成一位了,出来的结果有误。

例子代码:/schelling/YcDemo

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。