独角兽企业重金招聘Python工程师标准>>>
1、在Documents里创建目录
创建一个叫test的目录,先找到Documents的目录,
[cpp]view plain copy 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。
实现代码如下:
[cpp]view plain copy 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
[cpp]view plain copy 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使用操作当前目录
[cpp]view plain copy //创建文件管理器 NSFileManager*fileManager=[NSFileManagerdefaultManager]; NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString*documentsDirectory=[pathsobjectAtIndex:0]; //更改到待操作的目录下 [fileManagerchangeCurrentDirectoryPath:[documentsDirectorystringByExpandingTildeInPath]]; //创建文件fileName文件名称,contents文件的内容,如果开始没有内容可以设置为nil,attributes文件的属性,初始为nil NSString*fileName=@"testFileNSFileManager.txt"; NSArray*array=[[NSArrayalloc]initWithObjects:@"helloworld",@"helloworld1",@"helloworld2",nil]; [fileManagercreateFileAtPath:fileNamecontents:arrayattributes:nil]; 这样就创建了testFileNSFileManager.txt并把三个hello world写入文件了
changeCurrentDirectoryPath目录更改到当前操作目录时,做文件读写就很方便了,不用加上全路径
5、删除文件
接上面的代码,remove就ok了。
[cpp]view plain copy [fileManagerremoveItemAtPath:fileNameerror:nil];6、混合数据的读写
用NSMutableData创建混合数据,然后写到文件里。并按数据的类型把数据读出来
6.1写入数据:[cpp]view plain copy 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读取刚才写入的数据:
[cpp]view plain copy //读取数据: 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。因为[temp length]算长度是,把中文算成一位了,出来的结果有误。