ios文件模块的知识点

1.文件目录下关键对象的如下:

(1)NSArray *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde)

(2)NSDocumentDirectory

(3)NSUserDomainMask

(4)NSHomeDirectory

2.

iPhone会为每一个应用程序生成一个私有目录,这个目录位于:

/Users/sundfsun2009/Library/Application Support/iPhone Simulator/User/Applications下,

并随即生成一个数字字母串作为目录名,在每一次应用程序启动时,这个字母数字串都是不同于上一次。

所以通常使用Documents目录进行数据持久化的保存,而这个Documents目录可以通过:

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserdomainMask,YES) 得到。

代码如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSLog(@"path:   %@",path);

打印结果如下:

path:   /Users/apple/Library/Application Support/iPhone Simulator/4.3/Applications/550AF26D-174B-42E6-881B-B7499FAA32B7/Documents

而通过 NSHomeDirectory()也可以得到程序的目录,代码如下:

NSString *destPath = NSHomeDirectory();

NSLog(@"path:   %@",destPath);

打印结果如下:

path:   /Users/apple/Library/Application Support/iPhone Simulator/4.3/Applications/550AF26D-174B-42E6-881B-B7499FAA32B7

看看两者打印出来的结果,我们可以看出这两种方法的不同

3.这个主要就是返回一个绝对路径用来存放我们需要储存的文件

(NSString *)dataFilePath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:@"shoppingCar.plist"];
}
NSFileManager* fm=[NSFileManager defaultManager];
if(![fm fileExistsAtPath:[self dataFilePath]]){
//下面是对该文件进行制定路径的保存
[fm createDirectoryAtPath:[self dataFilePath] withIntermediateDirectories:YES attributes:nil error:nil];
//取得一个目录下得所有文件名
NSArray *files = [fm subpathsAtPath: [self dataFilePath] ];
//读取某个文件
NSData *data = [fm contentsAtPath:[self dataFilePath]];
//或者
NSData *data = [NSData dataWithContentOfPath:[self dataFilePath]];
}  

4.

因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件:

  • Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录
  • tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除
  • Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除

在Documents目录下创建文件

代码如下:

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory
                                            , NSUserDomainMask
                                            , YES);
NSLog(@"Get document path: %@",[paths objectAtIndex:0]);  

NSString *fileName=[[paths objectAtIndex:0] stringByAppendingPathComponent:@"myFile"];
NSString *content=@"a";
NSData *contentData=[content dataUsingEncoding:NSASCIIStringEncoding];
if ([contentData writeToFile:fileName atomically:YES]) {
    NSLog(@">>write ok.");
}  

可以通过ssh登录设备看到Documents目录下生成了该文件。

上述是创建ascii编码文本文件,如果要带汉字,比如:

NSString *fileName=[[paths objectAtIndex:0] stringByAppendingPathComponent:@"myFile"];
NSString *content=@"更深夜静人已息";
NSData *contentData=[content dataUsingEncoding:NSUnicodeStringEncoding];
if ([contentData writeToFile:fileName atomically:YES]) {
    NSLog(@">>write ok.");
}  

在其他目录下创建文件

如果要指定其他文件目录,比如Caches目录,需要更换目录工厂常量,上面代码其他的可不变:

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory
                                                , NSUserDomainMask
                                                , YES);  

使用NSSearchPathForDirectoriesInDomains只能定位Caches目录和Documents目录。

tmp目录,不能按照上面的做法获得目录了,有个函数可以获得应用的根目录:

NSHomeDirectory()

也就是Documents的上级目录,当然也是tmp目录的上级目录。那么文件路径可以这样写:

NSString *fileName=[NSHomeDirectory() stringByAppendingPathComponent:@"tmp/myFile.txt"];

或者,更直接一点,可以用这个函数:

NSTemporaryDirectory()

不过生成的路径将可能是:

…/tmp/-Tmp-/myFile.txt

使用资源文件

在编写应用项目的时候,常常会使用资源文件,比如:

安装到设备上后,是在app目录下的:

以下代码演示如何获取到文件并打印文件内容:

[objc] view plaincopy

  1. NSString *myFilePath = [[NSBundle mainBundle]
  2. pathForResource:@"f"
  3. ofType:@"txt"];
  4. NSString *myFileContent=[NSString stringWithContentsOfFile:myFilePath encoding:NSUTF8StringEncoding error:nil];
  5. NSLog(@"bundel file path: %@ \nfile content:%@",myFilePath,myFileContent);

代码运行效果:

时间: 2024-08-09 19:40:01

ios文件模块的知识点的相关文章

React Native iOS原生模块开发实战|教程|心得|如何创建React Native iOS原生模块

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691432) 前言 一直想写一下我在React Native原生模块封装方面的一些经验和心得,来分享给大家,但实在抽不开身,今天看了一下日历发现马上就春节了,所以就赶在春节之前将这篇博文写好并发布(其实是两篇:要看Android篇的点这里<React Native Android原生模块开发>). 我平时在用React Nativ

Node.js文件模块fs监视文件变化

Node.js文件模块fs监视文件变化 Node中文件模块fs监视文件的函数源码如下: fs.watch = function(filename) { nullCheck(filename); var watcher; var options; var listener; if (util.isObject(arguments[1])) { options = arguments[1]; listener = arguments[2]; } else { options = {}; listen

《iOS应用逆向工程》学习笔记(三)iOS文件权限

一个组可以包含多个用户,一个用户可以属于多个组. iOS中的每个文件都有一个属主用户和属主组.每个文件都具有一系列的权限. 在iOS中用3bit表示文件的使用权,从高位到低位分别是r(read), w(write), x(execute)权限. 文件和用户的关系存在三种可能性:(1)此用户是属主用户:(2)此用户不是属主用户,但在属主组里:(3)此用户既不是属主用户,也不在属主组里. 例如: 111101101代表rwxr-xr-x,其8进制为755,它表示该文件的属主用户拥有r, w, x权限

ios扩展的一些知识点

ios扩展的一些知识点 by 伍雪颖 - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { if (coordinator) { }else { } } 导航显示内容: - (void)widgetPerformUpdateWithCompletionHandler:(Void) (^)(NC

ios 文件上传

ASIHTTPRequest 框架支持文件的上传: 文件的上传使用ASIFormDataRequest; NSString *s = @"文件传输"; NSURL *url = [NSURL URLWithString:@"http://localhost:8080/text"];//传输地址 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; NSStringEncoding

IOS文件处理

IOS文件处理 简介 文件处理不能直观的通过应用程序来解释,我们可以从以下实例来了解IOS的文件处理. IOS中对文件的操作. 因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件. 文件处理中使用的方法 下面列出了用于访问和操作文件的方法的列表. 以下实例你必须替换FilePath1.FilePath和FilePath字符串为完整的文件路径,以获得所需的操作. 检查文件是否存在 NSFileManager *fileManager = [NSFileMan

iOS——文件操作NSFileManager (创建、删除,复制,粘贴)

iOS——文件操作NSFileManager (创建.删除,复制,粘贴) iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录.               上面的完整路径为:用户->资源库->Applicat

阿里云OSS上传文件模块

1 package com.hughes.bcsc.app.core.util.oss; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileNotFoundException; 8 import java.io.IOExceptio

获取iOS文件夹大小

提供一种获取iOS文件夹大小的方法.没有使用对文件夹内的文件枚举与文件大小字节数的累加. NSURL *cacheDirectory = [[NSFileManager defaultManager] URLForDirectory:NSCachesDirectory inDomain:NSUserDomainMaskappropriateForURL:nil create:NO error:nil]; NSDictionary *attributes = [[NSFileManager def