创建文件夹、创建文件、文件夹里面创建文件
项目中常用的NSUserDefaults存放的地址是:Library/Preferences;
通常用fileManager写入的例如页面缓存等存放地址是:Library/Caches。
NSUserDefaults直接写入后,是默认存放的plist文件(registerDefaults方法除外,它没有写入plist)。
fileManager写入:
1. 先创建路径(也就文件夹路径):
NSFileManager *fileM = [NSFileManager defaultManager];
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"wgj01"];
if (![fileM fileExistsAtPath:documentsPath]) {
[fileM createDirectoryAtPath:documentsPath withIntermediateDirectories:YES attributes:nil error:nil];
}
2. 写入方式一:
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"w"];
NSDictionary *dict = @{@"w":@"wwww"};
[dict writeToFile:filePath atomically:YES];
这样写入之后,在NSCachesDirectory里面的wgj01文件夹中有一个w文件,因为没有后缀,所以存放格式为xml格式。
3. 写入方式二:
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"ws.plist"];
NSDictionary *dict = @{@"w":@"wwww"};
[dict writeToFile:filePath atomically:YES];
文件ws有后缀,写入的是plist格式。
3.1 针对3 的读取&修改方式:
//读取:
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"ws.plist"];
NSMutableDictionary *dataDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
NSLog(@"\n\n\n%@",dataDict);
//修改或添加:
[dataDict setObject:@"mmmmm" forKey:@"m"];
[dataDict writeToFile:filePath atomically:YES];
3.2 对于项目文件中的plist文件:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"wgjTT" ofType:@"plist"];
和沙盒里面的plist文件(上面3.1)一样,对解析出来的字典或者数组进行增删改等操作,
但是,操作后,点击查看plist文件,发现没有变化,而,打印:
NSMutableDictionary *dataDictafter = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath1];
NSLog(@"\n\n\nTT0:\ndataDictafter:\n%@",dataDictafter);
发现,打印结果时改变后的结果。
猜测:应该是只写入了缓存,等程序重新运行,打印plist数据结果还是修改前的结果(plist并未有实质性的改变)。
4. 写入方式三:
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"wh"];
NSDictionary *dict = @{@"w":@"wwww"};
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
[fileM createFileAtPath:filePath contents:data attributes:nil];
这样,在wgj01文件夹下有一个wh文件,它里面的格式为:json格式。
eg.
{
"w" : "wwww"
}
4.1 针对4的读出方式:
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"wh"];
NSData *data = [NSData dataWithContentsOfFile:filePath];
NSDictionary *object11 = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
NSLog(@"\n\n\n%@",object11); //读取成功
5. 若想要继续创建文件夹,用stringByAppendingPathComponent后面拼接文件夹名称 并且 用 if (![fileM fileExistsAtPath:documentsPath]) {
[fileM createDirectoryAtPath:documentsPath withIntermediateDirectories:YES attributes:nil error:nil];
}创建文件夹。
沙盒路径各目录用途:
Documents 目录:您应该将所有de应用程序数据文件写入到这个目录下。这个目录用于存储用户数据或其它应该定期备份的信息。
AppName.app 目录:这是应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动。
Library 目录:这个目录下有两个子目录:Caches 和 Preferences
Library/Preferences 目录:包含应用程序的偏好设置文件。您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好.
Library/Caches 目录:用于存放应用程序专用的支持文件,保存应用程序再次启动过程中需要的信息。
tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息。
沙盒路径地址的获取:
1,获取家目录路径的函数:
NSString *homeDir = NSHomeDirectory();
2,获取Documents目录路径的方法:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
3,获取Caches目录路径的方法:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:0];
4,获取tmp目录路径的方法:
NSString *tmpDir = NSTemporaryDirectory();
5,获取应用程序程序包中资源文件路径的方法:
例如获取程序包中一个图片资源(apple.png)路径的方法:
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@”apple” ofType:@”png”];
UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];
代码中的mainBundle类方法用于返回一个代表应用程序包的对象。
e.g.
NSString *Path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSLog(@"目录:%@",Path);
NSString *dataStr1 = @"testdata";
NSString *dataStr2 = @"wgjwgj";
NSString *dataStr3 = @"umeng";
NSData *data1 = [dataStr1 dataUsingEncoding:NSUTF8StringEncoding];
NSData *data2 = [dataStr2 dataUsingEncoding:NSUTF8StringEncoding];
NSData *data3 = [dataStr3 dataUsingEncoding:NSUTF8StringEncoding];
NSString *path1 = [Path stringByAppendingPathComponent:@"wgjTest1"];
NSString *path2 = [Path stringByAppendingPathComponent:@"wgjTest2"];
NSString *path4 = [Path stringByAppendingPathComponent:@"wgjjm"];
NSFileManager *fileManager1 = [NSFileManager defaultManager];
//创建文件夹
[fileManager1 createDirectoryAtPath:path4 withIntermediateDirectories:YES attributes:nil error:nil];
//创建文件
[fileManager1 createFileAtPath:path1 contents:data1 attributes:nil];
[fileManager1 createFileAtPath:path2 contents:data2 attributes:nil];
//文件夹里面创建文件
NSString *path5 = [path4 stringByAppendingPathComponent:@"wgj5"];
[fileManager1 createFileAtPath:path5 contents:data3 attributes:nil];
NSURL *url = [NSURL fileURLWithPath:Path isDirectory:YES];
//遍历url这个相应的目录下的文件和文件夹以及文件夹中的文件,得出文件夹/文件目录,和文件大小
NSDirectoryEnumerator *fileEnumerator = [fileManager1 enumeratorAtURL:url
includingPropertiesForKeys:@[NSFileSize]
options:NSDirectoryEnumerationSkipsHiddenFiles
errorHandler:NULL];
NSUInteger fileCount = 0;
NSUInteger totalSize = 0;
for (NSURL *fileURL in fileEnumerator) {
NSNumber *fileSize;
[fileURL getResourceValue:&fileSize forKey:NSURLFileSizeKey error:NULL];
totalSize += fileSize.unsignedIntegerValue;
fileCount += 1;
}
网友评论