Foundation框架之文件操作

------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];

1)调用 - (BOOL)fileExistsAtPath:(NSString *)path;  

        //判断文件是否存在,传入一个文件的路径
        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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值