文件操作
1、简介
2、NSCoding(归档解档)
3、管理文件和目录
文件管理
//写文件,我们之前使用各种数据结构来存储数据:NSString,NSData,NSDictionary,NSArray等,他们都是有一个writeToFile方法用来写文件的
//纯文本:没有任何格式的数据
//非纯文本:有修饰的数据(字体大小,字体颜色等)
//数组只能将如下类型写入文件,如果包含其他对象,将写入失败:NSNumber,NSString,NSData,NSDate,NSArray,NSDictionary
//数组、字典写入的文件叫做属性文件,可以使用xcode进行编辑
//现在有这样的场景,第一次把字符串写入到文件中,当我们修改字符串之后,再次写入的时候,但是可能会写入失败
//但是之前的内容也有可能丢失,因为每次在写入新的内容的时候,会剪切之前的内容,所以这里就有可能新的没有写
//成功,旧的文件也丢失了
//所以这时候atomically参数:
//YES:会将新内容先写入到一个缓存文件中,如果写入缓存成功之后,这时候就将这个缓存文件替换旧文件,这样就很安全了
#import <Foundation/Foundation.h>
#import "Baby.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
NSFileManager * fm = [NSFileManager defaultManager];
//获取当前目录(相对路径)
NSString * strp = [fm currentDirectoryPath];
NSLog(@"%@", strp);
//设置绝对路径
NSString * path = @"/Users/len/Desktop";
//通过相对路径设置文件路径
NSString * path1 = [strp stringByAppendingString:@"/1111.txt"];
//创建目录(可以顺便创建文件)
//[[NSFileManager defaultManager] createDirectoryAtPath:path1 withIntermediateDirectories:YES attributes:nil error:nil];
//创建文件
[fm createFileAtPath:path1 contents:nil attributes:nil];
//文件写入(字符)
[strp writeToFile:path1 atomically:YES encoding:NSUTF8StringEncoding error:nil];
//文件读取(字符串)
NSString * str1 = [NSString stringWithContentsOfFile:path1 encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", str1);
//文件读取(二进制流)
NSLog(@"%@", [fm contentsAtPath:path1]);//NSData
//文件写入(数组)
NSArray * arr = @[@"11", @"22", @"aa"];
[arr writeToFile:path1 atomically:YES];
//文件读取(数组)
NSArray * arr1 = [NSArray arrayWithContentsOfFile:path1];
NSLog(@"%@", arr1);
//文件的属性字典
NSDictionary * dic = [fm attributesOfItemAtPath:path1 error:nil];
//字典的键NSFileSize对应文件的大小
int size = [[dic objectForKey:NSFileSize] intValue];
//文件读取(二进制流转化为字符串)(输出文件的所有内容而不仅仅是存入的对象的值)
NSData * data = [fm contentsAtPath:path1];
NSString * strData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@, %d, %@, %@", dic, size, data, strData);
//查看文件是否存在、新建、拷贝、删除
NSError * error ;
if ([fm fileExistsAtPath:path1])
{
[fm copyItemAtPath:path1 toPath:[path stringByAppendingString:@"/2222.txt"] error:nil];//如果没有2222这个文件,会自动创建。此处文件前的/,代表着目录的层次(本级还是上一级)
[fm createFileAtPath:[strp stringByAppendingString:@"/3333.docx"] contents:nil attributes:nil]; //如果没有则自动创建,docx成功
[fm copyItemAtPath:path1 toPath:[strp stringByAppendingString:@"/3333.docx"] error: &error];//docx可能无法写入?
[fm removeItemAtPath:path1 error:nil]; //删除1111
}
// NSString * path1 = [NSString stringWithFormat:@"%@/Desktop/1111.txt", NSHomeDirectory()];
// //路径的组成部分
// NSString * pathPart = [path1 pathComponents]; //第一个是"/",也是路径的一部分
// //路径的最后组成部分
// NSString * pathLast = [path1 lastPathComponent];
// //获取扩展名
// NSString * pathEX = [path1 pathExtension];
// //删除扩展名(.txt被删除了)
// NSString * pathDelEX = [