IOS学习笔记之二十二(文件io)

简介: IOS学习笔记之二十二(文件io)

1、NSData和NSMutableData和NSURL

NSData和NSMutableData表示oc的数据缓冲区

作用:

1)、对数据读取NSData

2)、输出NSData的数据

NSURL可以读取网络数据


2、MSFileManager管理文件和目录

作用:创建文件、删除文件、复制文件、移动文件


3、NSFileHandle处理文件io

我们可以用NSFileHandle写入数据到文件里面去、从文件里面读取数据、、

4、测试Demo

int main(int argc, char * argv[]) {
    @autoreleasepool {
        NSLog(@"当前用户名为:%@", NSUserName());
        NSLog(@"当前用户名为:%@", NSFullUserName());
        /**
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://www.baidu.com"]];
        NSLog(@"%ld", [data length]);
        char buff[200];
        [data getBytes:buff range:NSMakeRange(0, 20)];
        NSLog(@"%s", buff);
        //NSData to UTF-8 String
        NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"========");
        NSLog(@"%@", str);
            **/
//        NSString *documentsPath =[self getDocumentsPath];
//        rwxr-xr-x  3 ls  access_bpf    96B Jul 20 21:47 Documents
//        drwxr-xr-x  5 ls  access_bpf   160B Jul 20 20:45 Library
//        drwxr-xr-x  2 ls  access_bpf    64B Jul  5 16:24 SystemData
//        drwxr-xr-x  2 ls  access_bpf    64B Jul  5 16:24 tmp
        //获取沙盒根路径
        NSString *homePath = NSHomeDirectory();
        NSLog(@"home Paht is:%@", homePath);
        //获取 tmp目录
        NSString *tmpPath = NSTemporaryDirectory();
        NSLog(@"tmpPath is: %@", tmpPath);
        //获取Documents路径
        NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *path = [docPaths objectAtIndex:0];
        NSLog(@"document path:%@", path);
        NSFileManager *fileManager = [NSFileManager defaultManager];
        //创建文件夹
        NSString *dir = @"dir";
        NSString *dirPath = [path stringByAppendingPathComponent:dir];
        BOOL result = [fileManager createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:nil];
        if (result)
        {
            NSLog(@"make dir success");
        }
        else
        {
            NSLog(@"make dir fail");
        }
        //在document目录下面创建chenyu.txt文件,然后内容为hello, I am testing NSFileManager, my name is chenyu
        NSString *chenyuPath = [path stringByAppendingPathComponent:@"chenyu.txt"];
        NSString *content = @"hello, I am testing NSFileManager, my name is chenyu";
        BOOL isSuccess = [fileManager createFileAtPath:chenyuPath contents:[content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
        if (isSuccess) {
            NSLog(@"make chenyu.txt success");
        } else {
            NSLog(@"make chenyu.txt fail");
        }
        //读取chenyu.txt文件的内容
        NSString *value = [NSString stringWithContentsOfFile:chenyuPath encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"chenyu.txt value is:%@", value);
        //新建chenyu1.txt 文件
        NSString *chenyuPath1 = [path stringByAppendingPathComponent:@"chenyu1.txt"];
        NSString *content1 = @"hello, I am testing NSFileManager, my name is chenyu1";
        BOOL result1 = [fileManager createFileAtPath:chenyuPath1 contents:[content1 dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
        if (result1) {
            NSLog(@"make chenyu1.txt success");
        } else {
            NSLog(@"make chenyu1.txt fail");
        }
        //..../Data/Application/91D24910-B3CB-470C-9C62-D54E2815DF4E/Documents/
//        -rw-r--r--  1 ls  access_bpf    52B Jul 20 23:18 chenyu.txt
//        -rw-r--r--  1 ls  access_bpf    53B Jul 20 23:18 chenyu1.txt
//        drwxr-xr-x  2 ls  access_bpf    64B Jul 20 23:08 dir
//        -rw-r--r--  1 ls  access_bpf    33B Jul 20 22:12 iOS.txt
        //删除chenyu1.txt文件
        BOOL result2 = [fileManager removeItemAtPath:chenyuPath1 error:nil];
        if (result2) {
            NSLog(@"delete chenyu1.txt success");
        } else {
            NSLog(@"delete chenyu1.txt fail");
        }
//        -rw-r--r--  1 ls  access_bpf    52B Jul 20 23:23 chenyu.txt
//        drwxr-xr-x  2 ls  access_bpf    64B Jul 20 23:08 dir
//        -rw-r--r--  1 ls  access_bpf    33B Jul 20 22:12 iOS.txt
        //新建chenyu2.txt 文件
        NSString *chenyuPath2 = [path stringByAppendingPathComponent:@"chenyu2.txt"];
//        NSString *content2 = @"hello, I am testing NSFileManager, my name is chenyu2";
        BOOL res = [fileManager createFileAtPath:chenyuPath2 contents:nil attributes:nil];
        if (res) {
            NSLog(@"make chenyu2.txt success");
        } else {
            NSLog(@"make chenyu2.txt fail");
        }
        //NSFileHandle写数据到文件
        NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:chenyuPath2];
        [handle writeData:[@"this is useing NSHandle write data to chenyu2.txt" dataUsingEncoding:NSUTF8StringEncoding]];
        //NSFileHandle读取文件的内容
        NSFileHandle *readHandle = [NSFileHandle fileHandleForReadingAtPath:chenyuPath2];
        NSData *data = [readHandle readDataToEndOfFile];
        NSString *ss = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"read data is:%@", ss);
        //运行结果目录下的文件
//        rw-r--r--  1 ls  access_bpf    52B Jul 20 23:33 chenyu.txt
//        -rw-r--r--  1 ls  access_bpf    49B Jul 20 23:33 chenyu2.txt
//        drwxr-xr-x  2 ls  access_bpf    64B Jul 20 23:08 dir
//        -rw-r--r--  1 ls  access_bpf    33B Jul 20 22:12 iOS.txt
        // 用vim打开chenyu2.txt内容如下
//        this is useing NSHandle write data to chenyu2.txt
    }
}

上面部分部分//是在终端输入ll命令后打印的信息


5、运行结果

2018-07-21 21:22:02.771753+0800 cyTest[31783:15710817] 当前用户名为:
2018-07-21 21:22:02.774191+0800 cyTest[31783:15710817] 当前用户名为:
2018-07-21 21:22:02.774973+0800 cyTest[31783:15710817] home Paht is:/Users/ls/Library/Developer/CoreSimulator/Devices/3FF9B833-FAF8-4C30-A855-3D40A4EAE8A6/data/Containers/Data/Application/BE126DC7-C827-4BD0-8BFC-A517ADC66E6C
2018-07-21 21:22:02.775214+0800 cyTest[31783:15710817] tmpPath is: /Users/ls/Library/Developer/CoreSimulator/Devices/3FF9B833-FAF8-4C30-A855-3D40A4EAE8A6/data/Containers/Data/Application/BE126DC7-C827-4BD0-8BFC-A517ADC66E6C/tmp/
2018-07-21 21:22:02.775790+0800 cyTest[31783:15710817] document path:/Users/ls/Library/Developer/CoreSimulator/Devices/3FF9B833-FAF8-4C30-A855-3D40A4EAE8A6/data/Containers/Data/Application/BE126DC7-C827-4BD0-8BFC-A517ADC66E6C/Documents
2018-07-21 21:22:02.776600+0800 cyTest[31783:15710817] make dir success
2018-07-21 21:22:02.779185+0800 cyTest[31783:15710817] make chenyu.txt success
2018-07-21 21:22:02.780033+0800 cyTest[31783:15710817] chenyu.txt value is:hello, I am testing NSFileManager, my name is chenyu
2018-07-21 21:22:02.782365+0800 cyTest[31783:15710817] make chenyu1.txt success
2018-07-21 21:22:02.784235+0800 cyTest[31783:15710817] delete chenyu1.txt success
2018-07-21 21:22:02.785728+0800 cyTest[31783:15710817] make chenyu2.txt success
2018-07-21 21:22:02.786920+0800 cyTest[31783:15710817] read data is:this is useing NSHandle write data to chenyu2.txt
相关文章
|
1月前
|
搜索推荐 索引
【文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件
【文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件
34 2
|
1月前
|
编解码 Java 程序员
【文件IO】文件内容操作
【文件IO】文件内容操作
48 2
|
1月前
|
存储 Java API
【文件IO】文件系统操作
【文件IO】文件系统操作
42 1
|
2月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
1月前
|
存储 Java 程序员
【Java】文件IO
【Java】文件IO
35 0
|
2月前
|
Linux C语言
C语言 文件IO (系统调用)
本文介绍了Linux系统调用中的文件I/O操作,包括文件描述符、`open`、`read`、`write`、`lseek`、`close`、`dup`、`dup2`等函数,以及如何获取文件属性信息(`stat`)、用户信息(`getpwuid`)和组信息(`getgrgid`)。此外还介绍了目录操作函数如`opendir`、`readdir`、`rewinddir`和`closedir`,并提供了相关示例代码。系统调用直接与内核交互,没有缓冲机制,效率相对较低,但实时性更高。
|
3月前
|
存储 监控 Linux
性能分析之从 IO 高定位到具体文件
【8月更文挑战第21天】性能分析之从 IO 高定位到具体文件
43 0
性能分析之从 IO 高定位到具体文件
|
传感器 存储 定位技术
|
1月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
110 1
|
8天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
26 9