------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
NSFileManager介绍
1)NSFileManager是文件管理系统的它可以用来进行常见的文件\文件夹操作(拷贝、剪切、创建等)
2)NSFileManager使用了单例模式singleton使用defaultManager方法可以获得那个单例对象
//创建单例对象
NSFileManager *fm = [NSFileManager defaultManager];
NSFileManager基本 用法
首先创建4个路径
//存在的文件
NSString *fp = @"/Users/apple/Desktop/test.plist";
//不存在的文件
NSString *fp1 = @"/Users/apple/Desktop/test1.plist";
//存在的文件夹
NSString *fp2 = @"/Users/apple/Desktop";
//不存在的文件夹
NSString *fp3 = @"/Users/apple/Desktop/test";
然后创建NSFileManager的单例对象
//创建单例对象
NSFileManager *fm = [NSFileManager defaultManager];
//判断文件是否存在,传入一个文件的路径
BOOL isExist = [fm fileExistsAtPath:fp];
NSLog(@"%d",isExist); // 1
//判断文件是否存在,传入一个文件的路径
isExist = [fm fileExistsAtPath:fp1];
NSLog(@"%d",isExist); // 0
//判断文件夹是否存在,也就是一个路径是否存在
isExist = [fm fileExistsAtPath:fp2];
NSLog(@"%d",isExist); // 1
//判断文件夹是否存在,也就是一个路径是否存在
isExist = [fm fileExistsAtPath:fp3];
NSLog(@"%d",isExist); // 0
通过输出结果得知:- (BOOL)fileExistsAtPath:(NSString *)path; 判断的仅仅是路径,不管是文件,还是文件夹,都能判断。
2)调用- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory;
说明:这个方法和第一个方法一样,都可以返回路径是否存在,它的第二个参数也是一个返回值,返回判断该路径是否是目录
但是,我发现一个问题,就是能不能两个一起判断呢?下面我们来看看OC项目下的代码
//判断存在的文件路径
isExist = [fm fileExistsAtPath:fp isDirectory:&isDir];
if (isDir) {
NSLog(@"%d\t这是一个文件夹",isExist);
}else{
NSLog(@"%d\t这不是一个文件夹",isExist); //1 这不是一个文件夹
}
//判断存在的目录路径
isExist = [fm fileExistsAtPath:fp2 isDirectory:&isDir];
if (isDir) {
NSLog(@"%d\t这是一个文件夹",isExist); //1 这是一个文件夹
}else{
NSLog(@"%d\t这不是一个文件夹",isExist);
}
从结果看:当路径存在时,好像是可以的,输出的结果都是 1,表示该路径存在,后面的自己也是正确的。下面是路径不存在的时候的代码
//判断不存在的文件路径
isExist = [fm fileExistsAtPath:fp1 isDirectory:&isDir];
if (isDir) {
NSLog(@"%d\t这是一个文件夹",isExist);
}else{
NSLog(@"%d\t%d\t这不是一个文件夹",isExist,isDir); //0 0 这不是一个文件夹
}
<span style="white-space:pre"> </span>//判断不存在的文件路径
isExist = [fm fileExistsAtPath:fp3 isDirectory:&isDir];
if (isDir) {
NSLog(@"%d\t%d\t这是一个文件夹",isExist,isDir); //0 1 这是一个文件夹
}else{
NSLog(@"%d\t这不是一个文件夹",isExist);
}
从结果看:当路径不存在时,好像也可以,前面输出的 0,表示路径不存在,后面的数据和文字也都正确。上面是OS X中得代码,然后我又进行了IOS得测试显示的结果和上面一样,直接放代码了:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//存在的文件
NSString *fp = @"/Users/apple/Desktop/test.plist";
//不存在的文件
NSString *fp1 = @"/Users/apple/Desktop/test1.plist";
//存在的文件夹
NSString *fp2 = @"/Users/apple/Desktop/test";
//不存在的文件夹
NSString *fp3 = @"/Users/apple/Desktop/test/abc";
//创建单例对象
NSFileManager *fm = [NSFileManager defaultManager];
BOOL isExist;
//定义一个BOOL * 类型的变量,就收是否是文件夹
BOOL isDir;
//判断存在的文件路径
isExist = [fm fileExistsAtPath:fp isDirectory:&isDir];
if (isDir) {
NSLog(@"%d\t这是一个文件夹",isExist);
}else{
NSLog(@"%d\t这不是一个文件夹",isExist); //1 这不是一个文件夹
}
//判断不存在的文件路径
isExist = [fm fileExistsAtPath:fp1 isDirectory:&isDir];
if (isDir) {
NSLog(@"%d\t这是一个文件夹",isExist);
}else{
NSLog(@"%d\t%d\t这不是一个文件夹",isExist,isDir); //0 0 这不是一个文件夹
}
//判断存在的文件路径
isExist = [fm fileExistsAtPath:fp2 isDirectory:&isDir];
if (isDir) {
NSLog(@"%d\t这是一个文件夹",isExist); //1 这是一个文件夹
}else{
NSLog(@"%d\t这不是一个文件夹",isExist);
}
//判断不存在的文件路径
isExist = [fm fileExistsAtPath:fp3 isDirectory:&isDir];
if (isDir) {
NSLog(@"%d\t%d\t这是一个文件夹",isExist,isDir); //0 1 这是一个文件夹
}else{
NSLog(@"%d\t这不是一个文件夹",isExist);
}
}
下面是方法的源描述:
isDirectory
Upon return, contains YES if path is a directory or if the final path element is a symbolic link that points to a directory; otherwise, contains NO. If path doesn’t exist, this value is undefined upon return. Pass NULL if you do not need this information.
大概意思就是:关于返回值,如果路径是一个目录或者是一个链接就返回"YES", 否则就返回"NO",如果路径不存在,那么这个返回值是"undefined"。结论就是不能一起用,因为还有第三值"undefined"的存在,上面的代码,虽然输入正确,但是还是错误的。只能先判断路径是否存在,在判断已经存在的路径是不是一个目录
//判断文件是否存在,传入一个文件的路径
isExist = [fm fileExistsAtPath:fp];
if (isExist) {
//判断存在的路径,是否是目录
//此时我们不会关心返回值了,直接判断是否是目录即可
[fm fileExistsAtPath:fp isDirectory:&isDir];
if (isDir) {
NSLog(@"%d\t这是一个文件夹",isExist);
}else{
NSLog(@"%d\t这不是一个文件夹",isExist); //1 这不是一个文件夹
}
}
3)- (BOOL)isReadableFileAtPath:(NSString *)path;
//判断是否可读
BOOL isYse = [fm isReadableFileAtPath:fp];
NSLog(@"%d",isYse); //1
4)- (BOOL)isWritableFileAtPath:(NSString *)path;
//判断是否可写
BOOL isYse = [fm isWritableFileAtPath:fp];
NSLog(@"%d",isYse); //1
5)- (BOOL)isDeletableFileAtPath:(NSString *)path;
//判断是否可删除
BOOL isYse = [fm isDeletableFileAtPath:fp];
NSLog(@"%d",isYse); //1