IOS文件管理-NSFileMangager-NSdata
Ios下的文件管理, Ios下不像windows 文件系统那样可以访问任何的文件目录,如C盘、D盘什么的。在Ios中每个应用程序只能访问当前程序的目录,也即sandbox(沙盒模型)。
iOS为每个应用程序分配一个目录,该目录下默认有四个文件目录:
app:我们程序开发压缩的包文件,包含里面的程序集和资源文件。
documents:应用程序数据存储在Documents 中,但机于NSUerDefaults的首选设置除外
Library:基于NSUserDefaults 的首选设置存储在在Library/perfercens文件夹中
tmp:存储临时文件。
在本次开发中我的任务是 写相关的错误日志并将其写入到本地文件中,因此我选择的路径是documents。
我用的是使用NSFileManager 类进行文件管理,NSData进行文件读取,NSMutableData 进行文件写入的方案进行实现的。
创建NSFileManager 类中碰到的问题倒不是很多,但是用NSData 进行文件读取时,我却碰到总是无法获取句柄的问题(也就无法获取内容信息)
一开始我用的方法: [NSData dataWithContentsOfFile:path] path为整个文件的全路径,但是不论我怎么尝试,还是无法获取里面的内容。
后来我结合NSFileManager 来进行读取数据(在这里文件都是已经存在的)步骤如下:
例如:我们要读取的文件为:documents/cordova/log/201405.log
1、需要通过[NSFileManager changeCurrentDircectoryPath:[filePath stringByExpandingTildeInPath]]; 方法切换到documents/cordova/log 目录下面。(filePath 就是指定的该全部目录 具体可以参考NSSearchPathForDirectoriesInDomains 方法)
2、然后使用NSData *reader= [NSData dataWithContentsOfFile:@"201405.log"] 方法直接读取当前文件夹下的文件数据,这里已经将数据读取到内存中。
3、最后追加内容写入,
NSMutableData *write=[[NSMutableData alloc] initWithData:reader];--NSdata 初始化
[write appendData:meage] --添加数据
[write writeToFile:@“201405.log” atomically:YES];
其实我也不明白为什么直接给NSData全路径会出现得不到数据的问题。还有听说很多人说NSUrl 方式来写入和读取数据比较好。 下次若有时间也去好好体验一次。。。。这里先保留了!
二、文件日志 读写文件
//读写操作
+(void)Info:(NSString *)message
{
@synchronized(self){// 读写线程安全
// DBNAME 是要查找的文件名字,文件全名
NSString *filePath = [self getLogBasePath];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isDirtory=NO;
if (!([fileManager fileExistsAtPath:filePath isDirectory:&isDirtory]&&isDirtory)) {
//若不存在文件夹则创建文件夹
[fileManager createDirectoryAtPath:filePath withIntermediateDirectories:NO attributes:nil error:nil];
}
NSString *date= [[NSDate date] ToStringWithFormmate:@"yyyyMMdd"];
NSString *dateLogName=[date stringByAppendingString:@".txt"];
NSString *dateFilePath= [filePath stringByAppendingPathComponent:dateLogName];
if (![fileManager fileExistsAtPath:dateFilePath]) {
//文件不存在则创建
if(![fileManager createFileAtPath:dateFilePath contents:nil attributes:nil])return;
}
NSString *time=[[NSDate date] ToStringWithFormmate:@"yyyy-MM-dd hh:mm:ss"];
NSString *logMessage=[[NSString alloc] initWithFormat:@"%@ %@ \n",time,message];
NSData *reader= [NSData dataWithContentsOfFile:dateFilePath];
NSMutableData *write=[[NSMutableData alloc] initWithData:reader];//NSdata 初始化
[write appendData:[logMessage dataUsingEncoding:NSUTF8StringEncoding]]; //添加数据
BOOL reslut= [write writeToFile:dateFilePath atomically:YES];
if (reslut) {
NSLog(@"success");
}else
{
NSLog(@"fail");
}
}
}
日志读取
+(NSString*) readFileWithName:(NSString*)name
{
NSString *filePath = [self getLogBasePath];
NSData *reader= [NSData dataWithContentsOfFile:[filePath stringByAppendingPathComponent:name]];
NSString *result=[[NSString alloc] initWithData:reader encoding:NSUTF8StringEncoding];
return result;
}
+(NSString*)getLogBasePath //公用方法获取指定的目录
{
NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [directoryPaths objectAtIndex:0];
// DBNAME 是要查找的文件名字,文件全名
NSString *filePath = [documentDirectory stringByAppendingPathComponent:@"log"];
return filePath;
}
IOS文件管理-NSFileMangager-NSdata的更多相关文章
- iOS 基础类解析 - NSData、NSMutableData
iOS 基础类解析 - NSData.NSMutableData 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致& ...
- IOS 文件管理 2
IOS开发-文件管理(二) 五.Plist文件 String方式添加 NSString *path = [NSHomeDirectory( ) stringByAppen ...
- iOS NSDictionary、NSData、JSON数据类型相互转换
iOS经常需要用到数据类型的转换,下面列举一下常用类型的转换. 1.NSDictionary类型转换为NSData类型: //NSDictionary -> NSData: NSDictiona ...
- iOS 图片转NSData-b
iOS开发中 UIImage可能经常需要转为NSData 上传 传递等等 有两个比较常用的方法 UIImageJPEGRepresentation UIImagePNGRepresentation 第 ...
- iOS NSString 和NSData 转换
NSString 转换成NSData 对象 NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncodin ...
- iOS NSDictionary、NSData、JSON等 数据类型相互转换
1.NSDictionary类型转换为NSData类型: NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @&qu ...
- iOS - Usage of NSData
Reference link : https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/BinaryData/T ...
- <iOS>UIImage变为NSData并进行压缩
http://www.cnblogs.com/robinkey/archive/2013/01/21/2869930.html //sdk中提供了方法可以直接调用 UIImage *img = [UI ...
- ios开发之 -- NSData 和 NSString , UIImage 等之间的互转
//NSData转换为UIImage NSData *imageData = [NSData dataWithContentsOfFile: imagePath]; UIImage *image = ...
随机推荐
- ftp断点续传
有时候ftp的文件太大了 容易断掉 使用shell下载 1 #!/bin/bash 2 cd /data2/GATK2/refSeqDB/1000genomePhase3 3 ftp -v -n 19 ...
- 修改Mac]Bringing interface etch0:Device
OS版本:Red Hat Enterprise Linux AS4/5 网上有很多关于linux下修改MAC地址的方法,大多依葫芦画瓢,似乎都没验证过,达不到修改的目的. 经过我的详细测试,最终成功解 ...
- SlideSwitch
//SlideSwitch.java package com.example.hellojni; import android.content.Context; import android.cont ...
- css写宽为30%的正方形
如何用纯css写一宽为30%的正方形,用到了padding属性: 会不会恍然大悟呢? <!DOCTYPE html> <html lang="en"> &l ...
- 也谈谈 Redis 和 Memcached 的区别
本文作者: 伯乐在线 - 朱小厮 . 说到redis就会联想到memcached,反之亦然.了解过两者的同学有那么个大致的印象: redis与memcached相比,比仅支持简单的key-value数 ...
- Windows安装Python图像处理库:PIL模块
平常一般都在Linux下用Python,今天女票突然说让帮忙把一些图片全部弄成一个分辨率的,作为程序员,这种重复的工作还是交给计算机吧. 废话不多说,打开Cmd看下Windows的python下面是否 ...
- (24)odoo中模型标识汇总
* 设置->技术->数据结构->模型 模型 模型描述 类型 瞬态模型account.account 科目 基础对象 ...
- jq 中each的用法
jQuery的each方法的几种常用的用法 each()方法能使DOM循环结构简洁,可遍历一维数组.多维数组.DOM, JSON 等等. var arr = [ "one", &q ...
- Echart多图联动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- Java 中equals和toString()方法重写
1,equals方法 (1)什么时候需要重写? 如果希望不同内存但相同内容的两个对象equals时返回true,则需要重写equals (2)怎么重写? class A { public int i; ...