数据存储与IO(一)

一、NSData

  • dataWithContentsOfFile:用读取到的文件内容初始化NSData。
  • dataWithContentsOfURL:用读取URL关联到的内容初始化NS Data。
  • bytes:返回NSData对象所包含的数据。
  • writeToFile:atomically:将NSData数据写入文件。
  • writeToURL:atomically:将NSData数据写入URL对应的资源。

二、NSFileManager

1、NSFileManager采用文件名作为文件的唯一标识符,即每个文件名都对应一个NSString对象。这里先引入两个概念:

  • 相对路径:以当前路径为基础路径,不以斜线开头。同一个相对路径所代表的文件,可能会不同。
  • 绝对路径:以斜线开头的路径,绝对路径是唯一的,它代表的路径或目录是固定的。

开头是"/",代表根目录:/Users/abc。

开头是"~",代表当前用户的home目录:如用户是zhangsan,"~"就代表了/Users/zhangsan,也可写成~zhangsan。

开头是".",代表当前目录。

开头是"..",代表当前目录的上一级目录。

2、NSFileManager常用的方法:

  • fileExistsAtPath:判断路径对应的文件或目录是否存在。

    1 NSFileManager *fm = [NSFileManager defaultManager];
    2 NSString *path = @"/Users/hanlulu/Desktop/abc.txt";
    3 if ([fm fileExistsAtPath:path]) {
    4     NSLog(@"存在");
    5 } else {
    6     NSLog(@"不存在");
    7 }
  • fileExistsAtPath:isDirectory:判断路径对应的文件或目录是否存在,后一个参数用来判断是否为目录。

     1 NSFileManager *fm = [NSFileManager defaultManager];
     2 NSString *path = @"/Users/hanlulu/Desktop/abc.txt";
     3 BOOL isDir;
     4 if ([fm fileExistsAtPath:path isDirectory:&isDir]) {
     5     NSLog(@"存在");
     6     if (isDir) {
     7         NSLog(@"是目录");
     8     } else {
     9         NSLog(@"不是目录");
    10     }
    11 } else {
    12     NSLog(@"不存在");
    13 }
  • componentsToDisplayForPath:获取路径对应的文件的各个路径组件,返回NSArray。

    1 NSFileManager *fm = [NSFileManager defaultManager];
    2 NSString *path = @"/Users/hanlulu/Desktop/abc.txt";
    3 NSArray *dirs = [fm componentsToDisplayForPath:path];
    4 for (NSString *dir in dirs) {
    5     NSLog(@"%@", dir);
    6 }
  • attributesOfItemAtPath:error:获取路径对应的文件的属性,返回字典:dict[NSFileCreationDate]是创建时间,dict[NSFileSize]是文件大小。

    1 NSFileManager *fm = [NSFileManager defaultManager];
    2 NSString *path = @"/Users/hanlulu/Desktop/abc.txt";
    3 NSDictionary *dict = [fm attributesOfItemAtPath:path error:nil];
    4 NSLog(@"文件大小:%@,创建时间:%@。", dict[NSFileSize], dict[NSFileCreationDate]);
  • contentsAtPath:获取路径对应的文件的内容,返回NSData。
  • contentsEqualAtPath:andPath:判断两个路径对应的文件内容是否相同。
  • createDirectoryAtPath:withIntermediateDirectories:attributes:error:根据指定的路径创建目录。第二个参数是设置在父目录不存在的情况下是否要创建父目录。

    1 NSFileManager *fm = [NSFileManager defaultManager];
    2 NSString *path = @"/Users/hanlulu/Desktop/hehe/haha";
    3 NSError *error = nil;
    4 // 当hehe文件夹不存在时,YES能自动创建hehe,NO则不创建hehe并返回error错误信息。
    5 [fm createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error];
  • creatFileAtPath:contents:attributes:根据指定的路径、内容创建文件。

    1 NSFileManager *fm = [NSFileManager defaultManager];
    2 NSString *path = @"/Users/hanlulu/Desktop/hehe/haha/abc.txt";
    3 [fm createFileAtPath:path contents:[@"这是一条内容。" dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
  • removeItemAtPath:error:删除指定路径对应的文件。

    1 NSFileManager *fm = [NSFileManager defaultManager];
    2 NSString *path = @"/Users/hanlulu/Desktop/hehe/haha/abc.txt";
    3 [fm removeItemAtPath:path error:nil];
  • copyItemAtPath:toPath:error:根据指定路径复制文件或目录。
  • moveItemAtPath:toPath:error:根据指定路径移动文件或目录。

    1 1 NSFileManager *fm = [NSFileManager defaultManager];
    2 2 NSString *path = @"/Users/hanlulu/Desktop/hehe/haha/abc.txt";
    3 3 NSString *toPath = @"/Users/hanlulu/Desktop/hehe/abc.txt";
    4 4 [fm moveItemAtPath:path toPath:toPath error:nil];
  • contentsOfDirectoryAtPath:error:获取指定目录下所有文件和子目录。对子目录不会进行递归枚举。

    1 NSFileManager *fm = [NSFileManager defaultManager];
    2 NSString *path = @"/Users/hanlulu/Desktop";
    3 NSArray *array = [fm contentsOfDirectoryAtPath:path error:nil];
    4 for (NSString *item in array) {
    5     NSLog(@"%@", item);
    6 }
  • enumeratorAtPath:获取指定目录下所有文件和子目录的枚举器(NSDirectoryEnumerator对象),如果目下存在子目录,则进行递归枚举子目录的所有内容,也可调用NSDirectoryEnumerator对象的skipDescendants方法阻止递归枚举。

    1 NSFileManager *fm = [NSFileManager defaultManager];
    2 NSString *path = @"/Users/hanlulu/Desktop/hehe";
    3 NSDirectoryEnumerator *dirEnum = [fm enumeratorAtPath:path];
    4 NSString *file = nil;
    5 while (file = [dirEnum nextObject]) {
    6     NSLog(@"%@", file);
    7 }
  • subpathsOfDirectoryAtPath:error:以递归的的方式获取指定目录下的所有目录以及子目录。
  • subpathAtPath:此方法和上面方法类似。

    1 NSFileManager *fm = [NSFileManager defaultManager];
    2 NSString *path = @"/Users/hanlulu/Desktop/hehe";
    3 NSArray *array = [fm subpathsAtPath:path];
    4 for (NSString *item in array) {
    5     NSLog(@"%@", item);
    6 }

三、NSPathUtilities.h

1、NSPathUtilities.h是NSString类的扩展,在分类NSStringPathExtensions中主要提供了一些专门操纵路径的方法和属性:

  • - (NSArray *)pathComponents; 分拆路径,返回该路径中各部分所组成的数组。
  • - (NSString *)lastPathComponent; 获取该路径的最后一个组成部分。
  • - (NSString *)pathExtension; 获取该路径的最后一个组成部分的扩展名。
  • - (NSString *)stringByAppendingPathComponent:path:; 将path添加到指定路径的结尾处。
  • - (NSString *)stringByAppendingPathExtension:ext:; 将ext扩展名添加到指定路径的结尾处。
  • - (NSString *)stringByDeletingLastPathComponent:; 删除路径的最后一个组成部分。
  • - (NSString *)stringByDeletingPathExtension:; 删除路径的最后一个组成部分的扩展名。

2、下列函数用来获取系统相关属性:

  • NSUserName():;返回当前用户名。
  • NSFullUserName():; 返回当前用户的完整用户名。
  • NSHomeDirectory():; 返回当前用户的home目录。
  • NSHomeDirectoryForUser(user): ; 返回指定用户的home目录。
  • NSTemporaryDirectory():; 返回系统的临时目录。

四、NSProcessInfo

NSProcessInfo对象可以用于获取当前进程的相关信息:

  • environment: 返回系统内所有环境变量名和值组成的NSDictionary对象。
  • precessIdentifier:返回该进程的标识符。
  • processName:返回该进程的进程名。
  • setProcessName: 设置进程的进程名。
  • hostName: 返回进程所在系统的主机名。
  • operatingSystemVersion:返回进程所在系统的操作系统版本。
  • operatingSystemVersionString:返回进程所在系统的操作系统版本号。
  • physicalMemory:返回系统的物理内存。
  • processorCount:返回系统中CPU的数量。
  • systemUptime:返回系统已运行的时间。

五、NSFileHandle

NSFileHandle提供了大量处理文件IO的方法,详见该类的头文件。其基本使用步骤如下:

  • 创建一个NSFileHandle对象,它会打开指定的文件。
  • 调用NSFileHandle的一些方法,对打开的文件执行IO操作。
  • 关闭文件。

NSFileHandle没有提供创建文件的功能,这里需使用NSFileManager来创建。

NSFileHandle还提供了很多用于后台读写的方法,大多数以InBackgroundAndNotify结尾,这些操作是异步进行的,不会阻塞前台线程,在读写完成后会向前台发送一个通知。

时间: 2024-11-01 06:32:07

数据存储与IO(一)的相关文章

【Android】数据存储-java IO流文件存储

1.数据持久化:将在内存中的瞬时数据保存在存储设备中.瞬时数据:设备关机数据丢失.持久化技术提供一种机制可以让数据在瞬时状态和持久状态之间转换. 2.Android中简单的三种存储方式:文件存储.SharedPreference 存储以及数据库存储. 1.文件存储 :不对数据作任何处理,将数据原封不动地存储到文件中,适合存储一些简单的文本数据和二进制数据. a.将数据存储到文件中 Context类提供了一个openFileOutput()方法,可以用于将数据存储到文件中.这个方法接收两个参数,第

Android数据存储之IO

Android开发中免不了数据本地的存储,今天我们来说一说如何利用IO流来进行数据存储. 这里我们通过模拟一个QQ登陆界面的小demo来实际操作IO流. 功能描述:点击按钮能够保存用户输入的用户名和密码,当点击记住密码时,亦能在应用第二次打开时,回显用户名和密码 1.这里布局文件的代码就不贴了,看效果图 2.MainActivity.java package com.example.viewswitchtest; import java.io.BufferedReader; import jav

第三章:iOS的数据存储与IO

如果应用程序值需要保存程序参数.选项相关的少量数据,则可使用NSUserDefaults进行保存; 如果应用程序只是少量数据需要保存,那使用属性列表文件就可以了; 如果应用程序有大量数据需要存储.访问,就需要借助于数据库.iOS系统内置了SQLite数据库,SQLite数据库是一个真正轻量级的数据库,他没有后台进程,整个数据库就对应于一个文件,这样就可以非常方便的在不同设备之间移植.iOS为访问SQLite数据库提供了两套API:基于C语言风格的libsqlite3.dylib和面向对象的Cor

Android学习笔记十七.Android数据存储与IO.File存储常用API

Android通过一套完整的I/O流体系,包括FileInputStream.FileOutputStream等,通过这些I/O流来访问手机存储上的文件. 一.API 1.File (1)功能:该类提供一些有限的功能-获取或设置文件的权限.文件类型.最后依次修改时间等,通常它所代表的文件名(包含路径)将被转换为UTF-8字节序列被使用. (2)继承关系 java.lang.Object ? java.io.File (3)构造方法  File(File dir, String name):构造一

Android笔记----Android的数据存储和IO操作

使用SharedPreferences File存储 SQLite数据库           使用SharedPreferences 1.1 SharedPreferences与Editor简介 应用程序有少量的数据需要保存,而且这些数据的格式很简单,都是普通的字符串.标量类型的值等,比如应用程序的各种配置信息,对于这种数据,Android提供了SharedPreferences. SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此它保存的数据主要是简单类型的key

Android学习笔记十六.Android数据存储与IO.SharedPreferences

SharedPreferences 对于应用程序的数据输入.输出,如果是应用程序只是少量数据需要保存,那么使用普通文件就可以了(SharedPrefereces);但如果应用程序有大量数据需要存储.访问,就需要借助数据库了.Android系统内置了SQLite数据库,SQLite数据库是一个真正轻量级的数据库,它没有后台进程,整个数据库就对应于一个文件. 1.SharedPreferences简介 (1)概念:SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此它保存

IOS高级编程之二:IOS的数据存储与IO

一.应用程序沙盒 IOS应用程序职能在系统为该应用所分配的文件区域下读写文件,这个文件区域就是应用程序沙盒.所有的非代码文件如:图片.声音.映象等等都存放在此. 在mac中command+shift+G命令,然后输入users/用户名/library命令进入库,然后依次进入application support/iphone simulator/版本/applications文件夹,这里面的各个文件夹对应着各个应用程序. Documents:除了基于NSUserDefaults的首选项设置外,应

Android 数据存储与IO (二)

2.SD卡读写操作 1读写sd卡首先得添加读写权限 2.建一个布局文件,用来接收和展示数据 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"     android:la

Android 数据存储与IO (一)

1.Sharedpreference简介 为了保存软件的参数,或者是某些比较小型的数据,Android中我们可以使用Android为我么提供的SharedPreference类他是一个轻量级的储存类,特别适合用于保存软件参数使用SharedPreference保存数据,其背后是使用xml文件存放数据文件存放在/data/data/<-package name->/shared_prefs目录下 实例 <RelativeLayout xmlns:android="http://s