文章目录

  • 主要的类
    • NSFileManager
      • 创建文件管理类单例对象:
      • 创建目录
        • 定义带参宏
        • 附带中间路径
      • 创建文件
      • 路径遍历
        • 浅度遍历
        • 深度遍历
      • 文件移动
      • 复制操作
      • 删除操作
      • 查看属性
      • 查看文件是否在路径下存在
  • NSFileHandle
    • 打开文件
      • 读取文件
      • 写入数据
        • 文件数据的同步
        • 光标移动
      • 关闭文件

主要的类

NSFileManager:文件管理类,当我们要去创建目录,或者操作目录中某些文件的时候,或者想查看某个目录或者文件的属性。
NSFileHandle:如果操作对象是某个文件,并在里面进行文本的编辑。

NSFileManager

创建文件管理类单例对象:

NSFileManager *fileManger=[NSFileManager defaultManager];

创建目录

:第一个参数:文件夹目录
第二个参数:是否附带中间路径,也就是在目录之前可能生成一些中间目录出来,YES附带,NO不附带,如果要在第一个参数目录后面连续添加目录,则必须为YES.比如:/Users/chao/Desktop/FileOperation/Test/Test1
第三个参数:目录属性,一般用系统默认提供给我们的,一般传nil
第四个参数:如果目录创建失败,返回为什么创建失败了,以便于我们去完成一些异常操作。是一个二级指针。
返回是一个BOOL值,也能帮助我们判断路径是创建成功了还是失败了。

将文件夹拖动到xcode界面,会在文档里自动生成该文件夹的路径。

NSError *error=nil;
BOOL ret=[fileManager createDirectoryAtPath:@"/Users/chao/Desktop/FileOperation/Test" withIntermediateDirectories:NO attributes:nil error:&error];
if(ret){NSLog(@"目录创建成功");
}else{NSLog(@"目录创建失败,reason:%@",error);
}

定义带参宏

为了后续操作路径方便,对多次使用的同一个路径,可以写在一个宏定义当中。首先确定变量是什么,不变的量是什么。父路径是不变的,可变的是子路径,到底是创建目录呢,还是创建文件。

使用的时候,用到字符串拼接,或者格式化字符串的方法。

 #import <Foundation/Foundation.h>#define kPathAtFileOperation(subpath) \[NSString stringWithFormat:@"/Users/chao/Desktop/FileOperation/%@",subpatch]//main
NSError *error=nil;
BOOL ret=[fileManager createDirectoryAtPath:kPathAtFileOperation(@"test") withIntermediateDirectories:NO attributes:nil error:&error];
if(ret){NSLog(@"目录创建成功");
}else{NSLog(@"目录创建失败,reason:%@",error);
}

附带中间路径

test1和test1-1之前都没有生成过,此时第二个参数要写成YES,如果写成NO的话,程序不会识别中间的test1。

BOOL ret=[fileManager createDirectoryAtPath:kPathAtFileOperation(@"test1/test1-1") withIntermediateDirectories:YES attributes:nil error:&error];

创建文件

文件路径肯定是带 .文件类型 的。
contents参数接的是文件的内容,NSData类型,如果传nil,那么文件内容就是空的。

当多次创建相同的文件时,会进行覆盖操作。

NSString *string=@"文件操作";
NSData *data=[string dataUsingEncoding:NSUTF8StringEncoding];
ret=[fileManager createFileAtPath:kPathAtFileOperation(@"test.txt")  contents:data  attributes:nil];

路径遍历

浅度遍历

第一个参数:要遍历的路径。返回结果是NSArray类型的,会把目录下的所有内容全部列举出来。隐藏文件一般都是.开头的

NSArray *contents=[fileManager  contentsOfDirectoryAtPath:@"/Users/chao/Desktop/FileOperation" error:nil];

结果:
“.DS_Store”,
test,
“test.txt”,
test1

深度遍历

contents=[fileManager  subpathsOfDirectoryAtPath:@"/Users/chao/Desktop/FileOperation" error:nil];

结果:
“.DS_Store”,
test,
“test.txt”,
test1,
“test1/.DS_Store”,
“test1/test1-1”
浅度遍历的结果,在深度遍历里都可以找到。文件结构中所有的节点都会扫描一遍。所以浅度效率要高一些,深度遍历在路径复杂的时候,耗时会久一些。

文件移动

[fileManager moveItemAtPath:kPathAtFileOperation(@"test.txt")  toPath:kPathAtFileOperation(@"test/test.txt")  error:nil];

复制操作

[fileManager copyItemAtPath:kPathAtFileOperation(@"test/test.txt")  toPath:@"/Users/chao/Desktop/FileOperation"  error:nil];

删除操作

[fileManager removeItemAtPath:kPathAtFileOperation(@"test.txt")  error:nil];

查看属性

返回结果是字典NSDictionary类

NSDictionary *dictionary=[fileManager attributesOfItemAtPath:kPathAtFileOperation(@"test/test.txt") error:nil];

查看文件是否在路径下存在

if(fileManager  fileExistsAtPath:kPathAtFileOperation(@"test/test.txt")){NSLog(@"YES");
}else{NSLog(@"NO");
}

NSFileHandle

打开文件

只读,不可写:

NSFileHandle *  = [NSFileHandle fileHandleForReadingAtPath:"/Users/chao/Desktop/FileOperation/test/test.txt"]; NSLog(@"%@",[fileHandle  readDataToEndOffFile]);//从光标的位置读到文件末尾,如果不去操作光标位置,那么光标默认是在文件的最前面。读出的是二进制数据,要转换一下才能看到有意义的字符串

只写,不可读:

NSFileHandle *  = [NSFileHandle fileHandleForWritingAtPath:"/Users/chao/Desktop/FileOperation/test/test.txt"];

可读,可写:

NSFileHandle *  = [NSFileHandle fileHandleForUpdatingAtPath:"/Users/chao/Desktop/FileOperation/test/test.txt"];

读取文件

NSLog(@"%@",[fileHandle  readDataToEndOffFile]);
NSLog(@"%@",[fileHandle  readDataToEndOffFile]);

第二次输出为空,因为每次去调取读取文件相关方法的时候,都会导致光标的移动。

读取指定长度的数据:

[fileHandle  readDataOfLength:1];

写入数据

写入的是NSData数据。
string的dataUsingEncoding方法,字符串转NSData

NSString *string=@"baidu.com";
[fileHandle  writeData:[string dataUsingEncoding:NSUTF8StringEncoding]];

文件数据的同步

在进行了文件数据的修改后,可以手动调用synchronizeFile方法,来完成数据的同步,这是很常用的。

[fileHandle  synchronizeFile];

光标移动

offset是光标的偏移量,当offset为0,光标就会设置到文件开头。

[fileHandle seekToFileOffset:0];

关闭文件

每次打开文件,操作完成后,必须关闭文件。关闭之后就不能继续进行操作了。

[NSFileHandle  closeFile];

OC语言基础十:OC文件操作相关推荐

  1. C语言基础教程_文件操作

    文章目录 前言 一.文件的概念 1.1文件的定义 1.2磁盘文件的分类 二.文件指针 三.打开文件fopen 四.关闭文件fclose 五.一次读写一个字节 5.1 fgetc 5.2 fputc 六 ...

  2. C语言基础教学(文件操作)

    文章目录 前言 一.文件操作基本介绍 二.编程练习 总结 前言 这篇文章我们来讲解C语言中的文件操作,文件操作在C语言中算是一个比较重要的知识点,我们每天都在和文件打交道,各种文件夹的打开和关闭操作, ...

  3. 零基础学lua第十天---文件操作

    零基础学lua第十天-文件操作 一.前言 每个编程语言和都少不了对文件操作,lua中操作文件的方法非常简单,而且文件和输入输出操作都是使用的同一个库,可以说是相当方便了,下面我们来看下吧. 二.读取文 ...

  4. 【C/C++语言入门篇】-- 文件操作

    [C/C++语言入门篇]-- 文件操作 收藏 此文于2010-03-09被推荐到CSDN首页 如何被推荐? 最近实在是太忙了,这篇整整就推迟了1个月了,实在是对不起.之前本打算这个模块就结束了,文件操 ...

  5. 十、文件操作(易懂易学习,附代码案例)

    十.文件操作 10.1 概述 10.1.1 文件分类 10.1.2 磁盘文件的分类 10.2 文件的打开和关闭 10.2.1 文件指针FILE 10.2.2 文件的打开 10.2.3 文件的关闭 10 ...

  6. C语言基础专题 - 头文件引用

    C语言基础专题 - 头文件引用 本文介绍了C语言中头文件的引用方法 阅读本文前推荐阅读C语言预处理 1.

  7. 按平均成绩排行c语言文件操作,学生成绩管理系统(c语言结构体以及文件操作)实验报告精选.doc...

    学生成绩管理系统(c语言结构体以及文件操作)实验报告精选 C程序设计 实验报告 编号: 姓名院系学号任课教师于萧指导教师实验地点实验时间实验名称文件操作同 组 人无预习报告(对实验主要内容的认识)得分 ...

  8. 【C语言详解】——文件操作(建议收藏)

    前言:本期我们就进入C语言的最后一部分--文件操作,说起文件,广大学子可以说苦其久已,但实际上文件这部分要掌握的内容并不多,熟知其原理即可.因为在以后的实际应用中几乎不会使用到C语言的文件,一般都是使 ...

  9. C语言使用FILE指针文件操作

    C语言使用FILE指针文件操作 文件的基本概念 所谓"文件"是指一组相关数据的有序集合.这个数据集有一个名称,叫做文件名.实际上我们已经多次使用了文件,例如源程序文件.目标文件.可 ...

  10. [黑马IOS自学第九篇]OC语言基础,面向对象概念,类的创建,OC多文件开发等

    Extends Coc .EnhancedCc++/ .C-like c# 会在github上开源一个库,如果是私有库要交钱,自己o公司的项目不要勾 会把源代码提交上去 <span style= ...

最新文章

  1. 深度学习核心技术精讲100篇(七十七)-主流推荐引擎技术及优缺点分析
  2. 终于有人把Java技术知识面试体系整理出来了,这些文档让你的面试稳如泰山
  3. python response.json()报错_解决Django响应JsonResponse返回json格式数据报错问题
  4. Sublime text 2下alignment插件无效的解决办法
  5. oftc注册服务器占用,golang服务器程序运行过程中崩溃,报错:fatal error: runtime: out of memory...
  6. oracle排序后第一条,Oracle排序取第一条数据
  7. VR:下一个技术风口
  8. 使用TortoiseSVN的客户端钩子脚本触发Jenkins构建
  9. 1寸,2的照片多大啊
  10. Kotlin 笔记(三)
  11. 看看同一种字体是如何对应不同的字体文件的
  12. MongoDB磁盘空间碎片化问题排查指南
  13. 如何一键删除PPT的动画效果?
  14. android avm灰色,APICloud AVM多端开发案例深度解析(上)--点餐app开发
  15. java 视频压缩_Java 压缩视频(无需安装插件)
  16. 【报错】zipimport.ZipImportError: can‘t decompress data; zlib not available
  17. HTML自动暂停按钮,css播放暂停按钮实现_html/css_WEB-ITnose
  18. 获取进程全路径方法(支持xp、win7、win10系统)
  19. 给树莓派装一个仪表盘
  20. mac os上配置CDH4.1.1版hbase并启用snappy

热门文章

  1. 明月浩空播放器php源码,明月浩空音乐播放器
  2. C语言程序设计基础笔记
  3. JDK 8 最后一个免费版本 下载
  4. 用python模拟微信支付_微信app支付python代码实现
  5. 软件实施工程师是一个什么样的工作?他的具体工作内容是什么?发展前景怎样?.
  6. 计算机农业应用与3S技术论文,3S技术在精细农业中的应用实例分析
  7. 四叶草efi_Clover Configurator for Mac(四叶草配置引导工具)
  8. 鸟哥的linux私房菜 简书,《鸟哥的linux私房菜》学习笔记
  9. 鸟哥的Linux私房菜服务器架设篇 第三版
  10. Java 实现 植物大战僵尸 小游戏【附源码】