zoukankan      html  css  js  c++  java
  • NSData、NSString 、 NSFileManager

     

    1 NSData和NSMutableData的基本使用

    1.1 问题

    NSData类是IOS提供的用于以二进制的形式操作文件数据的类,NSData有两个常用的属性length和bytes,length表示字节的数量,bytes起始字节的位置是一个指针类型,本案例演示NSData和NSMutableData的基本使用,使用NSData /NSMutableData对象保存一个C语言字符串。

    1.2 方案

    首先使用Xcode创建一个命令行项目,在main函数中创建一个NSData对象data,使用initWithBytes:length:方法进行初始化,将一个C语言字符串保存起来,bytes参数就是字符串的起始地址,length是字节长度,可以通过在控制台输出查看。

    然后在main函数中创建一个NSMutableData对象mdata,可以使用initWithData:方法进行初始化,data是一个NSData类型的参数。

    最后通过NSMutableData类提供的方法resetBytesInRange:、appendData:、replaceBytesInRange:withBytes:分别对mdata对象进行重置、拼接和替换修改等操作。

    1.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:创建NSData对象

    首先在创建好的命令行项目中创建一个NSData对象,使用initWithBytes:length:方法进行初始化,本案例将一个C语言字符串保存起来,bytes参数就是字符串的起始地址,length是字节长度,代码如下所示:

     
    1. int main(intargcconst char * argv[]) {
    2. @autoreleasepool {
    3. char *s1 "abc";
    4. //length参数传递的值为strlen(s1)+1,因为要保存C语言字符串末尾的
    5. NSData *data [[NSDataalloc]initWithBytes:s1length:strlen(s1)+1];
    6. }
    7. return 0;
    8. }

    然后在控制台输出data对象的bytes和length属性,bytes属性使用%s占位符,length属性使用%lu占位符,代码如下所示:

    1. int main(intargcconst char * argv[]) {
    2. @autoreleasepool {
    3. char *s1 "abc";
    4. NSData *data [[NSDataalloc]initWithBytes:s1length:strlen(s1)+1];
    5. NSLog(@"%s,%lu",data.bytes,(unsigned long)data.length);
    6. }
    7. return 0;
    8. }

    最后运行程序在控制台输出,可以看见控制台将字符串“abc”输出,字节长度是4个,如图-1所示:

    图-1

    步骤二:创建NSMutableData对象

    首先在main函数中创建一个NSMutableData对象mdata,可以使用initWithData:方法进行初始化,data参数传递上一步创建好的data对象,代码如下所示:

     
    1. int main(intargcconst char * argv[]) {
    2. @autoreleasepool {
    3. char *s1 "abc";
    4. NSData *data [[NSDataalloc]initWithBytes:s1length:strlen(s1)+1];
    5. NSLog(@"%s,%lu",data.bytes,(unsigned long)data.length);
    6. NSMutableData *mdata [[NSMutableDataalloc]initWithData:data];
    7. NSLog(@"%s,%lu",mdata.bytes,mdata.length);
    8. }
    9. return 0;
    10. }

    此时mdata对象保存的同样是“abc”字符串。然后使用NSMutableData类提供的方法resetBytesInRange:将mdata对象里面的数据全都置为零,使用appendData:方法将data对象拼接到mdata对象的末尾,代码如下所示:

     
    1. int main(intargcconst char * argv[]) {
    2. @autoreleasepool {
    3. char *s1 "abc";
    4. NSData *data [[NSDataalloc]initWithBytes:s1length:strlen(s1)+1];
    5. NSLog(@"%s,%lu",data.bytes,(unsigned long)data.length);
    6. NSMutableData *mdata [[NSMutableDataalloc]initWithData:data];
    7. NSLog(@"%s,%lu",mdata.bytes,mdata.length);
    8. NSRange range {0,4};
    9. [mdataresetBytesInRange:range];
    10. [mdataappendData:data];
    11. }
    12. return 0;
    13. }

    最后使用replaceBytesInRange:withBytes:将mdata对象的第0-4个字节的数据用字符串“1234”替换,代码如下所示:

    1. int main(intargcconst char * argv[]) {
    2. @autoreleasepool {
    3. char *s1 "abc";
    4. NSData *data [[NSDataalloc]initWithBytes:s1length:strlen(s1)+1];
    5. NSLog(@"%s,%lu",data.bytes,(unsigned long)data.length);
    6. NSMutableData *mdata [[NSMutableDataalloc]initWithData:data];
    7. NSLog(@"%s,%lu",mdata.bytes,mdata.length);
    8. NSRange range {0,4};
    9. [mdataresetBytesInRange:range];
    10. [mdataappendData:data];
    11. char *s2 "1234";
    12. [mdatareplaceBytesInRange:range withBytes:s2];
    13. NSLog(@"%s",mdata.bytes);
    14. }
    15. return 0;
    16. }

    运行程序在控制台输出,可以看见控制台将拼接的字符串“1234abc”输出,字节长度是8个,如图-2所示:

    图-2

    1.4 完整代码

    本案例中,main.m文件中的完整代码如下所示:

     
    1. #import<Foundation/Foundation.h>
    2. int main(intargcconst char * argv[]) {
    3. @autoreleasepool {
    4. char *s1 "abc";
    5. NSData *data [[NSDataalloc]initWithBytes:s1length:strlen(s1)+1];
    6. NSLog(@"%s,%lu",data.bytes,(unsigned long)data.length);
    7. NSMutableData *mdata [[NSMutableDataalloc]initWithData:data];
    8. NSLog(@"%s,%lu",mdata.bytes,mdata.length);
    9. NSRange range {0,4};
    10. [mdataresetBytesInRange:range];
    11. [mdataappendData:data];
    12. char *s2 "1234";
    13. [mdatareplaceBytesInRange:range withBytes:s2];
    14. NSLog(@"%s,%lu",mdata.bytes,mdata.length);
    15. }
    16. return 0;
    17. }
     

    2 使用NSString和NSData读写文件

    2.1 问题

    NSString和NSData类可以相互转换。并且都可以通过writetoFile:方法直接写入文件,本案例使用NSString和NSData读写文件。

    2.2 方案

    首先使用Xcode创建一个命令行项目,在main函数中创建一个NSString类型的对象string,然后使用的方法writeToFile:atomically:encoding:将字符串直接写入文件,file参数是写入本地的文件路径,这里暂时使用电脑桌面路径(实际开发使用的应该是手机路径,后面课程会一一介绍),atomically参数设置为YES,encoding参数是字符串的编码格式,设置为最常用的编码格式UTF-8。

    然后在通过stringWithContentsOfFile:encoding:error:方法从文件中读取字符串,编码格式要与写入文件时使用的编码格式保持一致。如果在不知道编码格式的情况下可以使用stringWithContentsOfFile:usedEncoding:error:方法猜出编码格式,猜出的编码格式会通过引用参数usedEncoding返回。

    如果希望对NSString对象进行二进制的操作,那么就需要先将NSString对象转化为NSData对象,然后再使用NSData提供的写入文件的方法writeToFile:atomically:将NSString类型的对象存入文件。

    最后在读取文件的时候可以使用NSData提供的的dataWithContentsOfFile:方法或者是initWithContentsOfFile:方法。

    2.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:NSString直接写入文件

    首先在main函数中创建一个NSString类型的对象string,存储字符串“Hello world!”,然后使用的方法writeToFile:atomically:encoding:将字符串直接写入文件,file参数是写入本地的文件路径,这里暂时使用电脑桌面路径“/Users/Tarena/Desktop/hello.txt”,atomically参数设置为YES安全写入,encoding参数设置为NSUTF8StringEncoding,代码如下所示:

    1. int main(intargcconst char * argv[]) {
    2. @autoreleasepool {
    3. NSString *string = @"Hello world!";
    4. [stringwriteToFile:@"/Users/Tarena/Desktop/hello.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    5. }
    6. return 0;
    7. }

    然后运行程序,电脑桌面会增加一个名为hello.txt的文件,文件内容就是字符串“Hello world!”如图-3所示:

    图-3

    最后通过stringWithContentsOfFile:encoding:error:方法从文件中读取字符串,编码格式要与写入文件时使用的编码格式保持一致,代码如下所示:

     
    1. int main(intargcconst char * argv[]) {
    2. @autoreleasepool {
    3. NSString *string = @"Hello world!";
    4. [stringwriteToFile:@"/Users/Tarena/Desktop/hello.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    5. NSString *string1 [NSStringstringWithContentsOfFile:@"/Users/Tarena/Desktop/hello.txt" encoding:NSUTF8StringEncoding error:nil];
    6. NSLog(@"string1:%@",string1);
    7. }
    8. return 0;
    9. }

    如果在不知道编码格式的情况下可以使用stringWithContentsOfFile:usedEncoding:error:方法猜出编码格式,猜出的编码格式会通过引用参数usedEncoding返回,代码如下所示:

     
    1. int main(intargcconst char * argv[]) {
    2. @autoreleasepool {
    3. NSString *string = @"Hello world!";
    4. [stringwriteToFile:@"/Users/Tarena/Desktop/hello.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    5. NSString *string1 [NSStringstringWithContentsOfFile:@"/Users/Tarena/Desktop/hello.txt" encoding:NSUTF8StringEncoding error:nil];
    6. NSLog(@"string1:%@",string1);
    7. //在不知道编码信息的情况下可以通过此方法猜出编码
    8. NSStringEncodinguseEncoding;
    9. NSString *string2 [NSStringstringWithContentsOfFile:@"/Users/Tarena/Desktop/hello.txt" usedEncoding:&useEncodingerror:nil];
    10. //useEncoding就是猜出的编码格式
    11. NSLog(@"string2:%@,%lu",string2,(unsigned long)useEncoding);
    12. }
    13. return 0;
    14. }

    运行程序,读取的字符串仍然是“Hello world!”控制台输出的的useEncoding的值是4,查看对应的枚举值就是NSUTF8StringEncoding。

    步骤二:将NSString转化为NSData写入文件

    首先使用NSString提供的方法dataUsingEncoding:将string对象转化为NSData类型的对象data,然后再使用NSData提供的写入文件的方法writeToFile:atomically:将data对象写入文件,file参数就是文件的路径,代码如下所示:

    1. string = @"1234567890";
    2. NSData *data [string dataUsingEncoding:NSUTF8StringEncoding];
    3. [datawriteToFile:@"/Users/Tarena/Desktop/123.txt" atomically:YES];

    运行程序,电脑桌面会增加一个名为123.txt的文件,文件内容就是字符串“1234567890”,如图-4所示:

    图-4

    最后使用NSData提供的的dataWithContentsOfFile:方法或者是initWithContentsOfFile:方法读取文件,代码如下所示:

    1. string1 [[NSStringalloc]initWithData:data2 encoding:NSUTF8StringEncoding];
    2. NSLog(@"%@",string1);

    运行程序,控制台输出的字符串是“1234567890“。

    2.4 完整代码

    本案例中,main.m文件中的完整代码如下所示:

     
    1. #import<Foundation/Foundation.h>
    2. int main(intargcconst char * argv[]) {
    3. @autoreleasepool {
    4. NSString *string = @"Hello world!";
    5. [stringwriteToFile:@"/Users/Tarena/Desktop/hello.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    6. NSString *string1 [NSStringstringWithContentsOfFile:@"/Users/Tarena/Desktop/hello.txt" encoding:NSUTF8StringEncoding error:nil];
    7. NSLog(@"string1:%@",string1);
    8. //在不知道编码信息的情况下可以通过此方法猜出编码
    9. NSStringEncodinguseEncoding;
    10. NSString *string2 [NSStringstringWithContentsOfFile:@"/Users/Tarena/Desktop/hello.txt" usedEncoding:&useEncodingerror:nil];
    11. //useEncoding就是猜出的编码格式
    12. NSLog(@"string2:%@,%lu",string2,(unsigned long)useEncoding);
    13. string = @"1234567890";
    14. NSData *data [string dataUsingEncoding:NSUTF8StringEncoding];
    15. [datawriteToFile:@"/Users/Tarena/Desktop/123.txt" atomically:YES];
    16. NSData *data2 [NSDatadataWithContentsOfFile:@"/Users/Tarena/Desktop/123.txt"];
    17. string1 [[NSStringalloc]initWithData:data2 encoding:NSUTF8StringEncoding];
    18. NSLog(@"%@",string1);
    19. }
    20. return 0;
    21. }
     

    3 文件路径的基本操作

    3.1 问题

    文件路径是一个NSString类型的字符串,以“/”开头代表根目录,本案例演示如何使用NSString类提供了几种常用的操作路径的方法。

    3.2 方案

    首先在main函数中创建一个NSString类型的对象path,用于存储一个路径@"/Users/tarena/Desktop"。

    然后使用NSString提供的方法stringByAppendingPathComponent:对路径进行拼接,再使用pathComponents方法拆分路径。

    最后使用NSString提供的方法进行添加文件扩展名、获取和删除文件名等其他操作。

    3.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:创建路径

    首先在main函数中创建一个NSString类型的对象path,用于存储一个路径@"/Users/tarena/Desktop"。

    然后使用NSString提供的方法stringByAppendingPathComponent:对路径进行拼接,代码如下所示:

     
    1. int main(intargcconst char * argv[])
    2. {
    3. @autoreleasepool {
    4. NSString * path = @"/Users/tarena/Desktop";
    5. // 拼出子文件夹/子文件路径,会自动补上/
    6. NSLog(@"%@"[path stringByAppendingPathComponent:@"xcode_5.dmg"]);
    7. }
    8. return 0;
    9. }

    运行程序,控制台输出拼接好的路径,如图-5所示:

    图-5

    再使用pathComponents方法拆分路径,该方法会将组成路径的每个部分拆分开来,并且存储带一个数组中,该数组就是pathComponents方法的返回值,代码如下所示“

     
    1. int main(intargcconst char * argv[])
    2. {
    3. @autoreleasepool {
    4. // 1. 路径的组成
    5. NSString * path = @"/Users/apple/Desktop";
    6. // 2. 拼出子文件夹/子文件路径,自动补上/
    7. NSLog(@"%@"[path stringByAppendingPathComponent:@"xcode_5.dmg"]);
    8. // 3. 拆分一个路径的component
    9. NSArray * components [path pathComponents];
    10. for (NSString * component in components{
    11. NSLog(@"%@", component);
    12. }
    13. return 0;
    14. }

    运行程序,控制台依次输出组成路径的每个文件夹和文件名,如图-6所示:

    图-6

    步骤二:关于路径的其他操作

    使用stringByAppendingPathExtension:给文件名添加扩展名,代码如下所示:

    1. // 4. 追加文件扩张名,自动补上“.”
    2. NSString * path2 = @"/User/tarena/Desktop";
    3. path2 [path2 stringByAppendingPathComponent:@"Elephant"];
    4. path2 [path2 stringByAppendingPathExtension:@"jpg"];
    5. NSLog(@"%@", path2);

    运行程序控制台输出的路径为“/User/tarena/Desktop/Elephant.jpg”。

    使用pathExtension方法获取文件扩展名,代码如下所示:

    1. NSString * extension [path2 pathExtension];
    2. NSLog(@"%@", extension);

    使用lastPathComponent方法获取文件名,代码如下所示:

    1. NSString * component [path2 lastPathComponent];
    2. NSLog(@"%@", component);

    使用stringByDeletingLastPathComponent方法获取父文件夹路径,代码如下所示:

     
    1. NSString * path3 [path2 stringByDeletingLastPathComponent];
    2. NSLog(@"%@", path3);

    3.4 完整代码

    本案例中,main.m文件中的完整代码如下所示:

     
    1. #import<Foundation/Foundation.h>
    2. int main(intargcconst char * argv[])
    3. {
    4. @autoreleasepool {
    5. // 1. 路径的组成 /文件夹名/文件夹名/文件夹名/....../文件名
    6. NSString * path = @"/Users/tarena/Desktop";
    7. // 2. 拼出子文件夹/子文件路径,自动补上/
    8. NSLog(@"%@"[path stringByAppendingPathComponent:@"xcode_5.dmg"]);
    9. // 3. 拆分一个路径的component
    10. NSArray * components [path pathComponents];
    11. for (NSString * component in components{
    12. NSLog(@"%@", component);
    13. }
    14. // 4. 追加文件扩张名,自动补上“.”
    15. NSString * path2 = @"/User/tarena/Desktop";
    16. path2 [path2 stringByAppendingPathComponent:@"Elephant"];
    17. path2 [path2 stringByAppendingPathExtension:@"jpg"];
    18. NSLog(@"%@", path2);
    19. // 5. 获取文件后缀,用于判断文件类型(简单)
    20. NSString * extension [path2 pathExtension];
    21. NSLog(@"%@", extension);
    22. // 6. 获取最后一个component,获取文件/文件夹的名字
    23. NSString * component [path2 lastPathComponent];
    24. NSLog(@"%@", component);
    25. // 7. 删除最后一个component,返回上层文件夹/获取父文件夹路径
    26. NSString * path3 [path2 stringByDeletingLastPathComponent];
    27. NSLog(@"%@", path3);
    28. }
    29. return 0;
    30. }
     

    4 使用NSFileManager操作文件

    4.1 问题

    NSFileManager是IOS提供的对本地文件进行操作的类,例如创建目录、创建文件、遍历文件和文件夹、删除文件以及拷贝文件等,本案例演示使用NSFileManager对文件进行基本的操作。

    4.2 方案

    首先在main函数中通过defaultManager方法获取NSFileManager对象fileManager是一个单例对象,使用fileManager提供的方法createDirectoryAtPath:withIntermediateDirectories: attributes:error:在桌面创建一组文件夹,文件夹的层级关系如下:

    首先有一个users文件夹;

    users文件夹下有三个子文件夹分别为10000、10010、10086;

    10000、10010、10086三个文件夹下分别又有四个子文件夹分别为images、cache、 download、history。

    其次使用fileManager的方法createFileAtPath:contents:attributes:在images、cache、 download、history四个文件中创建文件,命名为data。如果是10086文件夹,则使用fileManager的方法removeItemAtPath:error:将data文件删除。

    然后使用fileManager的方法contentsOfDirectoryAtPath:遍历刚才创建的users文件夹的内容,并且判断是否为文件夹。

    最后fileManager的方法copyItemAtPath:toPath:将一张图片拷贝到电脑桌面。

    4.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:创建users文件夹

    首先在main函数中通过defaultManager方法获取NSFileManager对象fileManager是一个单例对象,使用fileManager提供的方法createDirectoryAtPath:withIntermediateDirectories: attributes:error:在桌面创建一组文件夹users,代码如下所示:

     
    1. int main(intargcconst char * argv[])
    2. {
    3. @autoreleasepool {
    4. //获取fileManager
    5. NSFileManager * fileManager [NSFileManagerdefaultManager];
    6. //创建文件和文件夹
    7. NSString * rootPath = @"/Users/Tarena/Desktop";
    8. NSString * usersFolder = @"users";
    9. NSArray * users = @[@"10086", @"10010", @"10000"];
    10. NSArray * folders = @[@"images", @"cache", @"download", @"history"];
    11. NSString * usersPath [rootPathstringByAppendingPathComponent:usersFolder];
    12. for (NSString * user in users){
    13. for (NSString * folder in folders{
    14. NSString * folderPath = nil;
    15. folderPath [usersPathstringByAppendingPathComponent:user];
    16. folderPath [folderPathstringByAppendingPathComponent:folder];
    17. //创建目录创建文件夹,withIntermediateDirectories是否顺便创建中间没有创建的文件夹
    18. [fileManagercreateDirectoryAtPath:folderPathwithIntermediateDirectories:YESattributes:nilerror:nil];
    19. }
    20. }
    21. }
    22. return 0;
    23. }

    运行程序,可见桌面上增加一个文件夹users,如图-7所示:

    图-7

    步骤二:创建data文件

    首先使用fileManager的方法createFileAtPath:contents:attributes:在images、cache、 download、history四个文件中创建文件,命名为data,代码如下所示:

     
    1. int main(intargcconst char * argv[])
    2. {
    3. @autoreleasepool {
    4. NSFileManager * fileManager [NSFileManagerdefaultManager];
    5. //创建文件和文件夹
    6. NSString * rootPath = @"/Users/Tarena/Desktop";
    7. NSString * usersFolder = @"users";
    8. NSArray * users = @[@"10086", @"10010", @"10000"];
    9. NSArray * folders = @[@"images", @"cache", @"download", @"history"];
    10. NSString * usersPath [rootPathstringByAppendingPathComponent:usersFolder];
    11. for (NSString * user in users){
    12. for (NSString * folder in folders{
    13. NSString * folderPath = nil;
    14. folderPath [usersPathstringByAppendingPathComponent:user];
    15. folderPath [folderPathstringByAppendingPathComponent:folder];
    16. //创建目录创建文件夹,withIntermediateDirectories是否顺便创建中间没有创建的文件夹
    17. [fileManagercreateDirectoryAtPath:folderPathwithIntermediateDirectories:YESattributes:nilerror:nil];
    18. NSString *filePath [folderPathstringByAppendingPathComponent:@"data"];
    19. NSString *string = @"123456";
    20. NSData *data [string dataUsingEncoding:NSUTF8StringEncoding];
    21. //创建文件
    22. [fileManagercreateFileAtPath:filePathcontents:dataattributes:nil];
    23. }
    24. }
    25. }
    26. return 0;
    27. }

    如果是10086文件夹,则使用fileManager的方法removeItemAtPath:error:将data文件删除,代码如下所示:

     
    1. int main(intargcconst char * argv[])
    2. {
    3. @autoreleasepool {
    4. NSFileManager * fileManager [NSFileManagerdefaultManager];
    5. //创建文件和文件夹
    6. NSString * rootPath = @"/Users/Tarena/Desktop";
    7. NSString * usersFolder = @"users";
    8. NSArray * users = @[@"10086", @"10010", @"10000"];
    9. NSArray * folders = @[@"images", @"cache", @"download", @"history"];
    10. NSString * usersPath [rootPathstringByAppendingPathComponent:usersFolder];
    11. for (NSString * user in users){
    12. for (NSString * folder in folders{
    13. NSString * folderPath = nil;
    14. folderPath [usersPathstringByAppendingPathComponent:user];
    15. folderPath [folderPathstringByAppendingPathComponent:folder];
    16. //创建目录创建文件夹,withIntermediateDirectories是否顺便创建中间没有创建的文件夹
    17. [fileManagercreateDirectoryAtPath:folderPathwithIntermediateDirectories:YESattributes:nilerror:nil];
    18. NSString *filePath [folderPathstringByAppendingPathComponent:@"data"];
    19. NSString *string = @"123456";
    20. NSData *data [string dataUsingEncoding:NSUTF8StringEncoding];
    21. //创建文件
    22. [fileManagercreateFileAtPath:filePathcontents:dataattributes:nil];
    23. //删除文件
    24. if ([user isEqualToString:@"10086"]) {
    25. [fileManagerremoveItemAtPath:filePatherror:nil];
    26. }
    27. }
    28. }
    29. }
    30. return 0;
    31. }

    运行程序,可以看到10000和10010两个文件夹中的所有子文件夹里面都有data文件,而10086里面则没有。

    步骤三:遍历文件夹和文件

    使用fileManager的方法contentsOfDirectoryAtPath:遍历刚才创建的users文件夹的内容,该方法将users的子文件名称放进一个数组返回,代码如下所示:

    1. //遍历文件夹下的子文件/子文件夹
    2. NSArray *fileNames [fileManagercontentsOfDirectoryAtPath:usersPatherror:nil];

    然后将每个文件名输出,并且使用fileExistsAtPath:isDirectory:方法判断该文件是否为文件夹,代码如下所示:

    1. for (NSString *fileName in fileNames{
    2. BOOL isDirectory;
    3. NSString *filePath [usersPathstringByAppendingPathComponent:fileName];
    4. //判断文件是否存在,以引用参数isDirectory返回是否为文件夹
    5. if ([fileManagerfileExistsAtPath:filePathisDirectory:&isDirectory]) {
    6. NSLog(@"%@是文件夹,isDirectory:%d",fileName,isDirectory);
    7. }
    8. }

    步骤四:拷贝文件

    使用fileManager的方法copyItemAtPath:toPath:将一张图片拷贝到电脑桌面,代码如下所示:

     
    1. //首先判断文件是否存在
    2. if ([fileManagerfileExistsAtPath:@"/Users/Tarena/Pictures/IMG_5723.JPG"]) {
    3. //拷贝文件
    4. [fileManagercopyItemAtPath:@"/Users/Tarena/Pictures/IMG_5723.JPG" toPath:@"/Users/Tarena/Desktop/photo.jpg" error:nil];
    5. }

    4.4 完整代码

    本案例中,main.m文件中的完整代码如下所示:

     
    1. #import<Foundation/Foundation.h>
    2. int main(intargcconst char * argv[])
    3. {
    4. @autoreleasepool {
    5. NSFileManager * fileManager [NSFileManagerdefaultManager];
    6. //创建文件和文件夹
    7. NSString * rootPath = @"/Users/Tarena/Desktop";
    8. NSString * usersFolder = @"users";
    9. NSArray * users = @[@"10086", @"10010", @"10000"];
    10. NSArray * folders = @[@"images", @"cache", @"download", @"history"];
    11. NSString * usersPath [rootPathstringByAppendingPathComponent:usersFolder];
    12. for (NSString * user in users){
    13. for (NSString * folder in folders{
    14. NSString * folderPath = nil;
    15. folderPath [usersPathstringByAppendingPathComponent:user];
    16. folderPath [folderPathstringByAppendingPathComponent:folder];
    17. //创建目录创建文件夹,withIntermediateDirectories是否顺便创建中间没有创建的文件夹
    18. [fileManagercreateDirectoryAtPath:folderPath
    19. withIntermediateDirectories:YES
    20. attributes:nil
    21. error:nil];
    22. NSString *filePath [folderPathstringByAppendingPathComponent:@"data"];
    23. NSString *string = @"123456";
    24. NSData *data [string dataUsingEncoding:NSUTF8StringEncoding];
    25. //创建文件
    26. [fileManagercreateFileAtPath:filePathcontents:dataattributes:nil];
    27. //删除文件
    28. if ([user isEqualToString:@"10086"]) {
    29. [fileManagerremoveItemAtPath:filePatherror:nil];
    30. }
    31. }
    32. }
    33. //遍历文件夹下的子文件/子文件夹
    34. NSArray *fileNames [fileManagercontentsOfDirectoryAtPath:usersPatherror:nil];
    35. for (NSString *fileName in fileNames{
    36. BOOL isDirectory;
    37. NSString *filePath [usersPathstringByAppendingPathComponent:fileName];
    38. //判断文件是否存在,以引用参数isDirectory返回是否为文件夹
    39. if ([fileManagerfileExistsAtPath:filePathisDirectory:&isDirectory]) {
    40. NSLog(@"%@是文件夹,isDirectory:%d",fileName,isDirectory);
    41. }
    42. }
    43. //首先判断文件是否存在
    44. if ([fileManagerfileExistsAtPath:@"/Users/Tarena/Pictures/IMG_5723.JPG"]) {
    45. //拷贝文件
    46. [fileManagercopyItemAtPath:@"/Users/Tarena/Pictures/IMG_5723.JPG" toPath:@"/Users/Tarena/Desktop/photo.jpg" error:nil];
    47. }
    48. }
    49. return 0;
    50. }
  • 相关阅读:
    poj 3528 (三维几何求凸包+凸包表面积)
    dijkstra模板(好像是斐波那契额堆优化,但我为什么看起来像优先队列优化,和spfa一样)
    最大空凸包模板
    ICPC 2017–2018, NEERC, Northern Subregional Contest St Petersburg, November 4, 2017 I题
    hdu 5248 序列变换
    hdu 2063(二分图模板测试)
    组合数
    85. Maximal Rectangle 由1拼出的最大矩形
    750. Number Of Corner Rectangles四周是点的矩形个数
    801. Minimum Swaps To Make Sequences Increasing 为使两个数组严格递增,所需要的最小交换次数
  • 原文地址:https://www.cnblogs.com/hytx/p/5051898.html
Copyright © 2011-2022 走看看