文件操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//【文件管理类 NSFileManager】
NSError * error = nil;//0
//ARC NSError __autorelease * error = nil;
//1.查看指定目录里面的文件(浅度遍历)
//第一个参数,要查看的文件夹路径
//第二个参数,错误信息
NSArray * fileContentsArray = [fm contentsOfDirectoryAtPath:PATH error:&error];
//操作文件,一定要有错误信息的判断,如果文件操作失败,没有做处理,后面的程序100%挂掉
if (error) {
//perror 打印错误信息
perror("contentsOfDirectoryAtPath");
}
//2.查看所有在这个文件夹下的文件(深度遍历)
//第一个参数,要查看的文件夹路径
//第二个参数,错误信息
NSArray * allFileContentsArray = [fm subpathsOfDirectoryAtPath:PATH error:&error];

//第一个参数:要创建文件夹的路径 这个路径是带有要创建的文件夹名的
//第二个参数:BOOL类型,控制,是否创建中间文件夹
//If YES, this method creates any non-existent parent directories as part of creating the directory in path. If NO, this method fails if any of the intermediate parent directories does not exist. This method also fails if any of the intermediate path elements corresponds to a file and not a directory.
//如果要创建的文件夹,含有中间路径,那么YES,表示如果没有这个中间路径,我们就连带中间路径一起创 建,如果存在,不用管它
//第三个参数:属性,创建文件夹的属性 默认属性nil
//第四个参数:错误信息
//返回值BOOL 判断创建是否成功
[fm createDirectoryAtPath:dstPath withIntermediateDirectories:YES attributes:nil error:&error];
//创建一个普通文件
//第一个参数:路径,这个路径是带有所要创建的文件名
//第二个参数:文件的内容,NSData 是OC当中二进制文件格式
//第三个参数:属性,默认nil
//利用他的返回值做出错判断
//NSString 转 NSData
NSString * str = @"今天赵雨铭同学,要给大家讲电子图书类!!!";
NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
BOOL ret = [fm createFileAtPath:[PATH stringByAppendingPathComponent:@"1.txt"]contents:data attributes:nil];

//删除文件夹 和 普通文件 是一个方法
//删除是不可逆的~~~
//第一个参数:路径是带有要删除的文件信息的
//第二个参数:错误信息
[fm removeItemAtPath:PATH error:&error];

//copy文件
//第一个参数:要复制的原路径,带有文件名 或者 文件夹名
//第二个参数:目标路径 必须加上要复制过去的文件名,这个文件名可以重命名
//第三个参数:error信息
[fm copyItemAtPath:[PATH stringByAppendingPathComponent:@"MID/test"]toPath: [PATH stringByAppendingPathComponent:@"test"] error:&error];


//移动文件
//第一个参数:要移动源文件路径
//第二个参数:目标路径,也要带上文件名
//第三个参数:error
[fm moveItemAtPath:[PATH stringByAppendingPathComponent:@"1副本.txt"] toPath: [PATH stringByAppendingPathComponent:@"1.txt"] error:&error];

//判断文件是否存在
//返回值BOOL YES 表示该文件存在,NO 表示该文件不存在
BOOL ret = [fm fileExistsAtPath:[PATH stringByAppendingPathComponent:@"12.txt"]];
if (ret) {
NSLog(@"This file exist!");
} else {
NSLog(@"This file No exist!");
}

//判断这个文件是不是文件夹
//返回值BOOL YES 表示这个路径的文件存在 NO 不存在
//isDirectory 传入参数是一个BOOL * YES 表示是一个文件夹,如果NO 表示是一个普通文件
//- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory;
BOOL isDirectory = NO;
ret = [fm fileExistsAtPath:[PATH stringByAppendingPathComponent:@"MIDd"] isDirectory:&isDirectory];

if (ret) {
if (isDirectory) {
NSLog(@"This is a directory!");
} else {
NSLog(@"This is normal file!");
}
} else {
NSLog(@"No such file or directory!");
}

//获取文件的属性
NSDictionary * dic = [fm attributesOfItemAtPath:PATH error:&error];
NSLog(@"%@",dic);
// {
// NSFileCreationDate = "2015-12-30 01:40:30 +0000";
// NSFileExtensionHidden = 0;
// NSFileGroupOwnerAccountID = 20;
// NSFileGroupOwnerAccountName = staff;
// NSFileModificationDate = "2015-12-30 03:27:14 +0000";
// NSFileOwnerAccountID = 501;
// NSFileOwnerAccountName = LXL;
// NSFilePosixPermissions = 493;
// NSFileReferenceCount = 12;
// NSFileSize = 408;
// NSFileSystemFileNumber = 3450634;
// NSFileSystemNumber = 16777220;
// NSFileType = NSFileTypeDirectory;
// }


【文件句柄类 NSFileHandle
//创建一个读取文件的句柄
NSFileHandle * fhForRead = [NSFileHandle fileHandleForReadingAtPath:PATH];
//创建一个用于写入文件的句柄
NSFileHandle * fhForWrite = [NSFileHandle fileHandleForWritingAtPath:PATH];
//创建一个读写句柄
NSFileHandle * fhForUpdating = [NSFileHandle fileHandleForUpdatingAtPath:PATH];

//读取数据,读取的数据是一个二进制数据
//这个读取文件的方式是要把文件全部读取到内存中去
//在iOS程序中,都是采用这样的读取文件方式
NSData * data = [fhForRead readDataToEndOfFile]; //EOF
//读取指定长度的文件,字节数
[fhForUpdating readDataOfLength:9];

//写入数据是一个覆盖写
[fhForWrite writeData:dataForWrite];
//文件指示器到文件的末尾
[fhForWrite seekToEndOfFile];
//文件指示器,到文件的指定位置,这个位置是一个字节数
[fhForWrite seekToFileOffset:<#(unsigned long long)#>]
//把文件截短成100
[fhForUpdating truncateFileAtOffset:10];


//【plist文件】 Property List
//在plist文件当中,只能保存一下几种数据NSString NSDate NSData NSNumber NSArray NSDictionary
//plist是一个可视化轻量级文件,通常是保存一下数据量不是太大的文件,QQ登陆信息
//XML文本
//数据对象NSArray NSDictionary

//1.创建一个plist文件
//第一个参数:代表要创建plist的路径,包括plist文件名
//第二个参数:表示是否要原子操作
[dict1 writeToFile:[PATH stringByAppendingPathComponent:@"dict.plist"] atomically:NO];

[array writeToFile:[PATH stringByAppendingPathComponent:@"array.plist"] atomically:NO];


[file] - > [new] - >[file] - > [OS X] - > [Property List]

//2.读取plist
NSArray * plistArray = [[NSArray alloc] initWithContentsOfFile:PATH];
NSURL * url = [[NSURL alloc] initWithString:URL];
NSDictionary * dict = [[NSDictionary alloc] initWithContentsOfURL:url];