本文Demo源代码:https://github.com/gaussli/FileManagerDemo
之前了解过了沙盒内部的基本组成,今天学习下在沙盒中创建文件夹以及文件
之前在学习沙盒的时候,用过一种创建文件的方法(writeToFile:atomically:)。这次说说另外的一种方法
1. 创建文件夹(test文件夹)
// 在Documents文件夹中创建文件夹 NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; [fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];
2. 在test文件夹中创建三个文件,并且写入数据
// 在test文件夹中创建三个测试文件(test1.txt/test2.txt/test3.txt),并写入数据 NSString *test1FilePath = [testDirectory stringByAppendingPathComponent:@"test1.txt"]; NSString *test2FilePath = [testDirectory stringByAppendingPathComponent:@"test2.txt"]; NSString *test3FilePath = [testDirectory stringByAppendingPathComponent:@"test3.txt"]; // 三个文件的内容 NSString *test1Content = @"helloWorld"; NSString *test2Content = @"helloTest2"; NSString *test3Content = @"helloTest3"; // 写入对应文件 [fileManager createFileAtPath:test1FilePath contents:[test1Content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; [fileManager createFileAtPath:test2FilePath contents:[test2Content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; [fileManager createFileAtPath:test3FilePath contents:[test3Content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
3. 获得文件夹中文件目录(递归获取)
// 获得目录中的所有文件 // 在test目录下再创建一个子目录subtest文件夹,里面再创建三个子文件(subtest1.txt/subtest2.txt/subtest3.txt) // 创建subtest目录 NSString *subtestDirectoryPath = [testDirectory stringByAppendingPathComponent:@"subtest"]; [fileManager createDirectoryAtPath:subtestDirectoryPath withIntermediateDirectories:YES attributes:nil error:nil]; // 创建三个子文件 [fileManager createFileAtPath:[subtestDirectoryPath stringByAppendingPathComponent:@"subtest1.txt"] contents:nil attributes:nil]; [fileManager createFileAtPath:[subtestDirectoryPath stringByAppendingPathComponent:@"subtest2.txt"] contents:nil attributes:nil]; [fileManager createFileAtPath:[subtestDirectoryPath stringByAppendingPathComponent:@"subtest3.txt"] contents:nil attributes:nil]; NSArray *testDirectoryFiles = [fileManager subpathsOfDirectoryAtPath:testDirectory error:nil]; NSLog(@"subpathsOfDirectoryAtPath的结果:%@", testDirectoryFiles); NSArray *testDirectoryFiles1 = [fileManager subpathsAtPath:testDirectory]; NSLog(@"subpathsAtPath的结果:%@", testDirectoryFiles1);
打印结果:
结果:
文件目录:
最后,看到一大神分析的createFileAtPath和writeToFile两个函数的差异,这里截取一下。
原网址:http://www.tuicool.com/articles/7fE3Q3E
里面说到
创建文件方法createFileAtPath: contents: attributes: 与writeToFile:atomically:YES在效率上没有什么区别,因此估计两者使用了逻辑是一致的;writeToFile:atomically:NO 比writeToFile:atomically:YES 效率高也是合乎情理(因为atomically:YES是先写到一个临时备份文件然后再改名的,以此来保证操作的原子性,防止写数据过程中出现其他错误),但需要注意的是,在创建空文件时,writeToFile:atomically:NO 效率非常之高,可以考虑在频繁创建空文件的时候使用writeToFile:atomically:NO 。
至此,end~