OC学习篇之—文件的操作

OC学习篇 尼古拉斯.赵四 7369℃ 0评论

前一篇文章中我们讲到了OC中的归档和解档操作:点击进入,今天我们来介绍OC中文件操作,在之前的文章中,已经接触到了文件的创建了,但是那不是很具体和详细,这篇文章我们就来仔细看一下OC中是如何操作文件的:

第一、首先来看一下本身NSString类给我们提供了哪些可以操作文件路径名的方法

//
//  main.m
//  37_FilePathHandle
//
//  Created by jiangwei on 14-10-13.
//  Copyright (c) 2014年 jiangwei. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //演示路径
        NSString *path = @"/Users/jiangwei/file.text";
        
        //1.返回路径的组成部分
        NSArray *array = [path pathComponents];
        NSLog(@"%@",array);
        
        //2.返回路径最后组成部分
        NSString *str = [path lastPathComponent];
        NSLog(@"%@",str);
        
        //3.在原有的路径后面追加子目录
        //这种方式有一点不好,就是需要添加/
        [path stringByAppendingString:@"/appFile.text"];
        //不需要添加/
        [path stringByAppendingPathComponent:@"appFile.text"];
        
        //4.删除最后的组成部分
        str = [path stringByDeletingLastPathComponent];
        //删除扩展名(.text被删除了)
        str = [path stringByDeletingPathExtension];
        
        //5.获取扩展名
        str = [path pathExtension];
        
        //6.添加扩展名
        [path stringByAppendingPathExtension:@".jpg"];
        
    }
    return 0;
}

在Java中,我们知道,当我们去操作一个文件的时候,最开始的时候肯定要去构建一个路径,这个路径一般都是String类型的,我们需要定义不同的路径和文件名,OC中也不例外,不过OC中的NSString类在这方面做的可能会更好,下面依次来看一下他的方法:

1、将路径进行分割

//演示路径
NSString *path = @"/Users/jiangwei/file.text";

//1.返回路径的组成部分
NSArray *array = [path pathComponents];
NSLog(@"%@",array);

运行结果:


返回的一个数组,将路径分割了,但是需要注意的是,第一个是”/”,这个也算是路径的一部分。

2、返回路径的最后组成部分

//2.返回路径最后组成部分
NSString *str = [path lastPathComponent];
NSLog(@"%@",str);

运行结果:


这个直接返回路径的最后一部分,这个如果放在Java中,我们可能需要用到String类的字符串分割技术了,没有这里的方便

3、添加子目录/子文件

//3.在原有的路径后面追加子目录
//这种方式有一点不好,就是需要添加/
//演示路径
str = [path stringByAppendingString:@"/appFile.text"];
NSLog(@"%@",str);
//不需要添加/
str = [path stringByAppendingPathComponent:@"appFile.text"];
NSLog(@"%@",str);

这里其实有两种方式可以添加,第一种是直接使用拼接字符串的方式,但是需要手动的添加”/”,第二种方式是NSString提供的,不需要手动的添加”/”

运行结果:

4、删除最后面的部分和后缀名

//4.删除最后的组成部分
str = [path stringByDeletingLastPathComponent];
NSLog(@"%@",str);
//删除扩展名(.text被删除了)
str = [path stringByDeletingPathExtension];
NSLog(@"%@",str);

运行结果:

5、获取扩展名

//5.获取扩展名
str = [path pathExtension];
NSLog(@"%@",str);

运行结果:

6、添加扩展名

//6.添加扩展名
str = [path stringByAppendingPathExtension:@"jpg"];
NSLog(@"%@",str);

运行结果:

上面就是总结了NSString类中操作文件路径的一些方法,其实这些操作如果放在Java中做的话,就是需要使用String的分割,拼接等技术了。这里看到OC给我们提供了便捷

第二、在来看一下操作文件之前需要了解的一个对象:NSData

这个类的作用就是将我们写入到文件中的数据进行编码和解码操作

//
//  main.m
//  38_NSData
//
//  Created by jiangwei on 14-10-13.
//  Copyright (c) 2014年 jiangwei. All rights reserved.
//

#import <Foundation/Foundation.h>

//NSData类型
//是一种存储形式
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //存储是有编码方式的,编程字节码
        //相当于Java中的解码和编码
        NSString *s = @"tsdfsdfsdfsdf";
        NSData *data = [s dataUsingEncoding:NSUTF8StringEncoding];
        s = [[NSString alloc] initWithData:data encoding:(NSUTF8StringEncoding)];
        
        //可变对象 NSMutableData 可以追加数据
    }
    return 0;
}

这个和Java中String直接在构造的时候就可以进行编码和解码了,这里需要使用中间类NSData,当然这个类是不可变的,如果想追加内容的话,需要使用NSMutableData类

第三、说完了NSData这个中间类,下面来正式说文件的操作了

但是这里对文件的操作,我们放到IOS平台去操作,因为我们后面也是会介绍IOS中文件的操作,所以就直接在这里说了,当然这里的知识会有点冲突,但是我们不关心IOS中的其他技术,只看他的文件操作:

1、沙盒文件

在IOS中,每个应用程序都是一个沙盒,他们有自己的文件目录,这个目录对其他程序是不可见的,和Android中的/data/data/包名/中的内容差不多,当然IOS中的沙盒目录有三种:

Documents:存放长期使用的文件(一般存放目录)

Library:系统存放文件

tmp:临时文件,app重启时,该目录下得文件清空

下面来看一个简单的例子吧:

//
//  main.m
//  36_SandBoxFile
//
//  Created by jiangwei on 14-10-13.
//  Copyright (c) 2014年 jiangwei. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        //获取沙盒目录
        //默认有三个文件夹
        //Documents:存放长期使用的文件(一般存放目录)
        //Library:系统存放文件
        //tmp:临时文件,app重启时,该目录下得文件清空
        
        //第一种获取方式,我们得到Home目录之后,手动的去拼接Document/Library
        NSString *homePath = NSHomeDirectory();
        NSLog(@"沙盒目录:%@",homePath);
        
        //第二种方式,直接使用Api获取
        //NSDocumentDirectory:Documents文件夹
        //NSLibraryDirectory:Library文件夹
        NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSLog(@"%@",array);
        
        NSArray *array1 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
        NSLog(@"%@",array1);
        
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

创建IOS项目和OC差不多: