iOS文件操作

作者: 伊人半笑 | 来源:发表于2017-07-23 20:06 被阅读130次

一、获取沙盒下文件目录

沙盒应用根目录:NSHomeDirectory()是应用程序目录的路径,在改文件目录下有三个文件夹:Documents、Library、temp以及一个.app包

NSString *homeDir = NSHomeDirectory();

应用程序包:存放应用程序的源文件,包括资源文件和可执行文件

[[NSBundle mainBundle] pathForResource:@"wtdb" ofType:@"sqlite"];

Documents:保存用户生成的文件、应用程序不能重新创建的文件。可被iTunes备份

// 获取Documents目录路径
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

Library:可创建子文件夹。除Caches以外,都会被iTunes备份
/Preferences:包含应用程序的偏好设置文件
/Caches:用于存放应用程序专用的支持文件,保存应用程序再次启动过程中需要的信息,保存可以重新下载或者重新生成的数据。适合存储体积大,不需要备份的非重要数据

// 获取Library的目录路径
NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];

// 获取Caches目录路径
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];

tmp:存放临时数据,保存应用程序再次启动过程中不需要的信息。不会被iTunes备份

// 获取tmp目录路径
NSString *tmpDir =  NSTemporaryDirectory();

关于iOS Data Storage Guidelines,参考iOS Data Storage Guidelines - Apple Developer

  • Documents和Caches文件夹区别

    如果你做个记事本的app,那么用户写了东西,总要把东西存起来。那么这个文件则是用户自行生成的,就放在documents文件夹里面。
    如果需要和服务器配合,经常从服务器下载东西,展示给用户看。那么这些下载下来的东西就放在library/caches。

二、文件夹操作

创建文件夹

NSString *documentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//test文件夹
documentsDir = [documentsDir stringByAppendingPathComponent:@"test"];
//是否是文件夹
BOOL isDir;
BOOL isExit = [filemanager fileExistsAtPath:documentsDir isDirectory:&isDir];
//文件夹是否存在
if (!isExit || !isDir) {
    [filemanager createDirectoryAtPath:documentsDir withIntermediateDirectories:YES attributes:nil error:nil];
}

删除文件夹

//删除Wtdb文件夹
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
NSString *wtdbPath = [cachesDir stringByAppendingPathComponent:@"Wtdb"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:wtdbPath]) {
    BOOL isSuccess = [fileManager removeItemAtPath:wtdbPath error:nil];
}

移动文件夹

NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];
NSString *moveToPath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];
BOOL isSuccess = [fileManager moveItemAtPath:filePath toPath:moveToPath error:nil];
if (isSuccess) {
    NSLog(@"rename success");
}else{
    NSLog(@"rename fail");
}

重命名文件夹

//通过移动该文件对文件重命名
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];
NSString *moveToPath = [documentsPath stringByAppendingPathComponent:@"rename.txt"];
BOOL isSuccess = [fileManager moveItemAtPath:filePath toPath:moveToPath error:nil];
if (isSuccess) {
    NSLog(@"rename success");
}else{
    NSLog(@"rename fail");
}

三、文件操作

复制

//bundle里的数据库文件复制到Caches/Wtdb文件夹下
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
NSFileManager *filemanager = [NSFileManager defaultManager];
cachesDir = [cachesDir stringByAppendingPathComponent:@"Wtdb"];
BOOL isDir;//是否是文件夹
BOOL exit = [filemanager fileExistsAtPath:cachesDir isDirectory:&isDir];
//文件夹是否存在
if (!exit || !isDir) {
    [filemanager createDirectoryAtPath:cachesDir withIntermediateDirectories:YES attributes:nil error:nil];
}
//判断数据库文件是否存在
NSString *wtdbPath = [cachesDir stringByAppendingPathComponent:@"wtdb.sqlite"];
//如果文件不存在,则复制
if (![filemanager fileExistsAtPath:wtdbPath]) {
    NSString *dbBundlePath = [[NSBundle mainBundle] pathForResource:@"wtdb" ofType:@"sqlite"];
    BOOL isSuccess = [filemanager copyItemAtPath:dbBundlePath toPath:wtdbPath error:nil];
    DLog(@"数据库文件%@", isSuccess ? @"拷贝成功" : @"拷贝失败");
}
  • 删除、移动、重命名与文件夹操作类似,path为文件路径。

写数据到文件

NSString *documentsPath =[self dirDoc];  
NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];  
NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];  
NSString *content=@"测试写入内容!";  
BOOL res=[content writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil];  
if (res) {  
    NSLog(@"文件写入成功");  
}else {  
    NSLog(@"文件写入失败");  
}

读文件数据

NSString *documentsPath =[self dirDoc];  
NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];  
NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];  
//NSData *data = [NSData dataWithContentsOfFile:testPath];  
//NSLog(@"文件读取成功: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);  
NSString *content=[NSString stringWithContentsOfFile:testPath encoding:NSUTF8StringEncoding error:nil];  
NSLog(@"文件读取成功: %@",content);  

文件属性

NSString *documentsPath =[self dirDoc];  
NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];  
NSFileManager *fileManager = [NSFileManager defaultManager];  
NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];  
NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:testPath error:nil];     
NSArray *keys;  
id key, value;  
keys = [fileAttributes allKeys];  
int count = [keys count];  
for (int i = 0; i < count; i++)  
{  
    key = [keys objectAtIndex: i];  
    value = [fileAttributes objectForKey: key];  
    NSLog (@"Key: %@ for value: %@", key, value);  
} 

参考:

  1. http://www.cnblogs.com/iOS-mt/p/4185407.html
  2. http://www.superqq.com/blog/2015/07/24/nsfilemanagerwen-jian-cao-zuo-de-shi-ge-xiao-gong-neng/
  3. http://www.itdadao.com/articles/c15a663369p0.html

相关文章

  • iOS 文件操作

    沙盒机制 沙盒的概念 沙盒是每一个iOS应用程序都会自动创建的一个文件系统目录(文件夹),而且沙盒还具有独立、封闭...

  • iOS 文件操作

    一、前言 在我们平时的开发过程中,经常会遇到数据本地化的需求,像图片处理、个人信息处理等,这时候我们一般会进行文件...

  • ios 文件操作

    1.判断文件是否存在 2.向文件中写内容

  • iOS文件操作

    一、获取沙盒下文件目录 沙盒应用根目录:NSHomeDirectory()是应用程序目录的路径,在改文件目录下有三...

  • iOS文件操作

    一直在倒腾iOS逆向,逆向水平受限于正向水平。边学iOS开发边学逆向,感觉这个过程有点艰辛。平时写代码写得不是很多...

  • [IOS] 文件操作

    1: 拖拽需要打包的文件至工程为蓝色,勾选 Copy items if needed and Create fol...

  • IOS 文件操作

    所谓文件操作是指我们通过程序操作文件 读 计算机读,对计算机来说,内存就相当于大脑从文件(存放在硬盘上)到内存,叫...

  • IOS 文件操作

    文件操作

  • ios 文件操作

    NSFileManager NSFileManager允许你对文件目录和文件进行基本操作。以下列出其一些常用方法。...

  • iOS 文件操作

    iOS文件(沙盒目录,文件创建、移动、复制等) 目录获取获取沙盒的主目录路径: (NSString *)homeD...

网友评论

    本文标题:iOS文件操作

    本文链接:https://www.haomeiwen.com/subject/towmkxtx.html