2015-07-18 12:19:06 Ronaldo_Carry 阅读数 400

IOS中对文件的操作

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

  • Document
  • tmp
  • Library/Cache
//Document

var tp=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.AllDomainsMask,true)

       var url=NSURL(fileURLWithPath:"\(tp[0])/data.txt")

       println(url)

       var data=NSMutableData()

        data.appendData("曾今天真相信爱能永无止境\n".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion:true)!)

        data.writeToFile(url!.path!, atomically:true)

       println("end")


//tmp

      var url=NSHomeDirectory().stringByAppendingPathComponent("tmp/data.txt")

        println(url)

        var data=NSMutableData()

        data.appendData("曾今天真相信爱能永无止境\n飘扬的外衣街上叫卖的小曲\n".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion:true)!)

        data.writeToFile(url, atomically:true)

        println("end")

    //Cache

 同上面的Document一样 只不过是把NSSearchPathDirectory.DocumentDirectory改为NSSearchPathDirectory.CachesDirectory


运行程序后到相应目录下 可以看到  写的文字在文件里面


   



2015-12-25 11:16:30 sevenquan 阅读数 255
http://blog.csdn.net/xyz_lmn/article/details/8968213
2016-03-15 11:48:02 ccflying88 阅读数 496

加载plist或其它文件

获取plist文件的路径

NSString *path = [[NSBundle mainBundle] pathForResource:@"data.plist" ofType:nil];
// [NSBundle mainBundle] 表示获取这个app安装到手机上时的安装目录;然后在app的安装根目录下搜索data.plist文件的路径;
NSString *path = NSHomeDirectory(); // 获取沙盒地址

打开plist文件,获取数据

NSArray *arr = [NSArray arrayWithContentsOfFile:path];
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:path];

通过xib动态创建UIView

XXView *view = [[[NSBundle mainBundle] loadNibNamed:@"TestXib" owner:nil options:nil] firstObject];
// NSBundle的loadNibNamed方法会返回一个UIView*的数组,因为一个xib文件中可以添加多个UIView;

xib加载过程
<1>.根据文件名,搜索对应的xib(nib)文件;
<2>.加载xib文件的时候,会按顺序加载xib文件中的每个控件;
<3>.对于每个控件,创建的时候都会查找对应的Class属性中配置的类型,然后创建相应的类的对象;
<4>.创建好某个控件后,按照在xib中配置的属性值,依次为对象的属性赋值;
创建好该控件的子控件,并设置属性值,然后把该控件加入到父控件中;
最后返回一个数组,这个数组中包含创建的根元素对象;
加载xib的另外一种方法

UINib *nib = [UINib nibWithNIbName:@"" bundle:nil];  // 使用nainBundle,根据xib文件创建xib对象;
UIView *view = [[nib instantiateWithOwner:nil opsions:nil] lastObject];  // 获取xib中某个对象(控件)

NSFileManager

NSFileManager *mgr = [NSFileManager defaultManager];  // 获取文件操作对象;
// 在创建的时候,contents传nil,此时文件大小为0
[mgr createFileAtPath:filePath contents:nil attributes:nil];
[mgr fileExistsAtPath:];  // 文件是否存在;
// 获取一个文件的属性(大小,修改时间等);
NSDictionary *attr = [mgr attributesOfItemAtPath:file error:nil];// 获取file路径对应的文件信息(NSFileType,NSFileSize...)
[attr[NSFileSize] longLongValue]; // 获取文件大小
[mgr removeItemAtPath:file error:nil]; // 删除文件\文件夹

判断file是否存在,并获取是否是文件夹;

BOOL isDirectory = NO;  
BOOL fileExists = [mgr fileExistsAtPath:file isDirectory:&isDirectory];

遍历:

[mgr contentsOfDirectoryAtPath:file error:nil];
// 只能获取file文件夹里面的子文件\子文件夹;
[mgr subpathsAtPath:file] // 获取file文件夹里面的文件及子文件夹下面的文件;

NSFileHandle

读写文件句柄

NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:filePath];
handle.totalLength = 12;  // 设置完整的文件长度;
[handle truncateFileAtOffset:length];  // 让文件的长度为length;

[handle seekToEndOfFile];  // 移动到文件的尾部;
[handle writeData:data];  // 从当前移动的位置写入数据;
[handle closeFile];  // 关闭连接(不再输入数据到文件中);

NSData

获取本地文件二进制数据,两种方式:

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"xx.txt" ofType:nil];
NSData *data = [NSData dataWithContentsOfFile:filepath];
// 给本地文件发送一个请求;
NSURL *fileurl = [[NSBundle mainBundle] URLForResource:"xx.txt" withExtension:nil];
NSURLRequest *request = [NSURLRequest requestWithURL:fileurl];
NSURLResponse *response = nil;
NSData *d = [NSURLConnection sendSynchronousRequest:request returningResponse:response error:nil];
// response.MIMETYPE;  // 文件类型;
NSData *data1 = [NSData dataWithContentsOfURL:fileurl];

NSDictionary与NSData互转

把dict字典对象序列化成NSData二进制数据

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dict];

将二进制数据转换成字典

NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:data];
2012-09-21 11:01:08 theonezh 阅读数 690

在ios的开发中,经常遇到要读写文件的情况,例如处理照片,采集信息等,那么在ios中对文件的读写有两种方式:

1 使用NSData 来将整个数据读取到内存中

NSData *myData = [[[NSData alloc] initWithContentsOfFile:appFile] autorelease];

将文件写到文件中

[data writeToFile:appFile atomically:YES]

使用这种方式比较适合针对小文件的读写,可以全部的读到内存中处理,比如说全局性的配置文件等。

2 使用c的api来读取

在ios的开发中,可以使用c,objective-c 混合编程的方法来进行文件的操作,我们可以使用fseek,fread,fwrite等函数来对文件读写。

NSString* imgFile = [[NSBundle mainBundle] pathForResource:fileName ofType:@"bundle" inDirectory: dir ];

FILE * _imgFileHandle =NULL;

_imgFileHandle =fopen([imgFile UTF8String],"rb");

if (_imgFileHandle != NULL)

{

long idxPos = 20;

fseek(_imgFileHandle, idxPos, SEEK_SET);

char * buff[5];
memset(buff,0,5);

fread(buff, 1, 5, _imgFileHandle);

fclose(_imgFileHandle);

}

转自:http://blog.csdn.net/ch_soft/article/details/8001096

2013-05-18 08:47:15 wufeixianggo 阅读数 346

由于Objective C是C的扩展版,所以,可以直接用C的api来读写文件。

但是,ios本身提供了NSFileManager来进行文件操作

-(void)writeFile:(NSString*)filename:(NSString*)data

{    
//获得应用程序沙盒的Documents目录,官方推荐数据文件保存在此
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    

NSString* doc_path = [path objectAtIndex:0];    

//NSLog(@"Documents Directory:%@",doc_path);    

//创建文件管理器对象

NSFileManager *fm = [NSFileManager defaultManager];          NSString* _filename = [doc_path stringByAppendingPathComponent:filename];     
//NSString* new_folder = [doc_path stringByAppendingPathComponent:@"test"];    
 //创建目录 
//[fm createDirectoryAtPath:new_folder withIntermediateDirectories:YES attributes:nil error:nil];          
[fm createFileAtPath:_filename contents:[data dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; 
} 
- (IBAction)sendMailAndWriteFile:(id)sender 
{ //先写入文件 
NSString* _username = username.text; 
NSString* _phone = phone.text ; 
NSString* _email = email.text ; 
NSString* _title = title.text ; 
NSString* filename = @"data.txt"; 
NSString* data = [NSString stringWithFormat:@"用户名:%@\n电话:%@\nEmail:%@\n地址:%@\n*****\n",_username,_phone,_email,_title,nil]; 
[self writeFile:filename:data] ; 
} 

 

 

没有更多推荐了,返回首页