ios获取新数据要不要关_iOS开发之数据读写

iOS进阶

1:数据处理之数据读写

1):获取当前应用程序的沙盒根目录

NSString*rootPath = NSHomeDirectory();

NSLog(@"%@",rootPath);

rootPath就是根目录

然后将打印出来的文件目录右键单击选择services下的Reveal In Finder

2):

Documents:存储持久化文件数据

Library/Caches:存储缓存数据

Library/Preferences:存储应用的所有偏好设置

tmp:保存应用运行时所需的临时数据

3):定位当前应用程序的沙盒根目录

//1.Documents

NSString*docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

NSLog(@"%@",docPath);

//2.library

NSString*libPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];

NSLog(@"libPath is %@",libPath);

//3.library/Caches

NSString*cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];

NSLog(@"cachesPath is %@",cachesPath);

//4.library/preferences   只能用拼接方法定位

NSString*prePath = [libPath stringByAppendingPathComponent:@"Preferences"];

NSLog(@"prePath is %@",prePath);

//5.tmp

NSString*tmpPath = NSTemporaryDirectory();

NSLog(@"tmpPath is %@",tmpPath);

4):存储应用程序的偏好设置的类:NSUserDefaults

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults] ;

[defaults setObject:@"tang" forKey:@"name"] ;

//同步

[defaults synchronize] ;

NSLog(@"%@",[defaults objectForKey:@"name"]);

5):简单对象的读写操作

只有四种简单的数据类型才能直接写入进文件

NSString NSDictionary NSData NSArray

第一步:获取沙盒下文件夹Documents的路径

NSString*docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

第二步:创建需要写入的文件路径

NSString*filePath = [docPath stringByAppendingString:@"/text.txt"];

第三步:创建字符串对象

NSString*string = @"is副科级领导盖房了";

第四步:写入,四种简单的数据类型的写入方法差不多的

[string writeToFile:filePath atomically:YESencoding:NSUTF8StringEncodingerror:nil];

第五步:读取字符串对象

NSString*resultStr = [NSStringstringWithContentsOfFile:filePath encoding:NSUTF8StringEncodingerror:nil];

数组和字典可参照字符串对象的写入读取方法

*NSData对象的写入和读取(将图片存储)

第一步和第二步是一样的

第三步:UIImage*image = [UIImageimageNamed:@"0"];

第四步:NSData*data = UIImagePNGRepresentation(image);

第五步:写入

[data writeToFile:dataPath atomically:YES];

读取图片并在模拟器上显示:

NSData*resultData = [NSDatadataWithContentsOfFile:dataPath];

UIImage*reImage = [UIImageimageWithData:resultData];

UIImageView*imageView = [[UIImageViewalloc] initWithImage:reImage];

imageView.frame= self.view.bounds;

[self.viewaddSubview:imageView];

6):在沙盒目录下创建文件

第一步:找到沙盒路径(caches)

//1.获取Documents目录

NSString*docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

//2.创建文件路径

NSString*filePath = [docPath stringByAppendingString:@"/baobao.txt"];

//3.创建文件管理对象

NSFileManager*manager = [NSFileManagerdefaultManager];

//4.创建

[manager createFileAtPath:filePath contents:[@"sdfasdfs"dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];

NSLog(@"%@",filePath);

//计算文件或文件夹的大小

NSDictionary*dic = [manager attributesOfItemAtPath:filePath error:nil];

NSLog(@"%@",dic);

NSNumber*number = [dic objectForKey:NSFileSize];

NSLog(@"%@",number);

7):创建文件夹和创建文件的核心代码差别在:

a:文件夹路径没有后缀名,文件有

b:文件管理器创建方法的不同

//2.创建文件夹的路径

NSString*filePath = [cachesPath stringByAppendingString:@"/text"];

//3.创建文件管理器对象

NSFileManager*manager = [NSFileManagerdefaultManager];

[manager createDirectoryAtPath:filePath withIntermediateDirectories:YESattributes:nilerror:nil];

/*

在Documents文件夹下,创建一个文件夹(path),在该文件夹下创建一个文件(test.txt),将一个图片对象存入到该文件中,然后在Caches文件夹下创建一个文件夹名为"testDirectroy",将test.txt文件复制到这个文件夹下.

*/

- (void)moveFile {

//1.获取Documents目录

NSString*docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

//2.创建文件夹路径

NSString*filePath = [docPath stringByAppendingString:@"/path"];

NSFileManager*manager = [NSFileManagerdefaultManager];

[manager createDirectoryAtPath:filePath withIntermediateDirectories:YESattributes:nilerror:nil];

//3.创建文件路径

NSString*testPath = [filePath stringByAppendingString:@"/test.txt"];

[manager createFileAtPath:testPath contents:[@"aa"dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];

//4.写入图片

UIImage*image = [UIImageimageNamed:@"0"];

NSData*data = UIImagePNGRepresentation(image);

[data writeToFile:testPath atomically:YES];

//5.caches目录

NSString*cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

//6.创建文件夹testDirectroy

NSString*directoryPath = [cachesPath stringByAppendingPathComponent:@"testDirectroy"];

[manager createDirectoryAtPath:directoryPath withIntermediateDirectories:YESattributes:nilerror:nil];

//7创建一个和documents中需要复制的文件同名的文件

NSString*desPath = [directoryPath stringByAppendingString:@"/test.txt"];

//8.复制时需要创建文件管理器

[manager copyItemAtPath:testPath toPath:desPath error:nil];

NSLog(@"%@",directoryPath);

}

/*

练习要求:

在Documents目录下创建一个文件text.txt

从文件的偏移量为3的时候开始追加内容1234

*/

- (void)addContent {

//1.得到Documents目录

NSString*docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

//2.创建文件夹路径

NSString*filePath = [docPath stringByAppendingPathComponent:@"fiel"];

NSFileManager*manager = [NSFileManagerdefaultManager];

[manager createDirectoryAtPath:filePath withIntermediateDirectories:YESattributes:nilerror:nil];

//3.创建文件路径

NSString*textPath = [filePath stringByAppendingPathComponent:@"/text.txt"];

[manager createFileAtPath:textPath contents:[@"hahahahahaha"dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];

//4.创建文件对接器

NSFileHandle*handle = [NSFileHandlefileHandleForUpdatingAtPath:textPath];

//此时文件在更新状态下,即可读也可写

[handle seekToFileOffset:3];

//5.开始在偏移量为3的地方写入字符串

[handle writeData:[@"1234"dataUsingEncoding:NSUTF8StringEncoding]];

[handle closeFile];

NSLog(@"%@",textPath);

}

//核心代码如下

//创建文件对接对象

NSFileHandle*handle = [NSFileHandlefileHandleForUpdatingAtPath:filePath];

//此时的文件对接对象既可以读也可以写

//将偏移量移动到3的位置

[handle seekToFileOffset:3];

//写入数据

[handle writeData:[@"1"dataUsingEncoding:NSUTF8StringEncoding]];

//执行完操作之后不要忘了关闭文件

[handle closeFile];

8):复杂文件的归档和反归档(持久化操作)

//归档

- (void)archiver {

//1.创建person对象

Person*p1 = [[Personalloc] initWithName:@"tangxi"age:@"18"];

Person*p2 = [[Personalloc] initWithName:@"aren"age:@"20"];

//2.获取Documents目录

NSString*docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSString*filePath = [docPath stringByAppendingString:@"/haha.txt"];

//3.创建可变数据对象

NSMutableData*data = [NSMutableDatadata];

//4.创建归档类的对象

NSKeyedArchiver*archiver = [[NSKeyedArchiveralloc] initForWritingWithMutableData:data];

//5.将person对象归档

[archiver encodeObject:p1 forKey:@"person1"];

[archiver encodeObject:p2 forKey:@"person2"];

//6.结束归档

[archiver finishEncoding];//此时不管有几个对象没有被归档都会停止归档了

//7.将可变数据data写入创建的文件

[data writeToFile:filePath atomically:YES];

NSLog(@"%@",filePath);

}

//反归档

- (void)unarchiver {

//1.获取Documents目录

NSString*documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSString*filePath = [documents stringByAppendingPathComponent:@"haha.txt"];

NSData*data = [NSDatadataWithContentsOfFile:filePath];

NSKeyedUnarchiver*unarchiver = [[NSKeyedUnarchiveralloc] initForReadingWithData:data];

Person*person = [unarchiver decodeObjectForKey:@"person1"];

NSLog(@"name is %@, age is %@",person.name,person.age);

[unarchiver finishDecoding];

}

//还要创建一个模型对象Person,遵循NSCoding协议

实现两个协议方法:

- (instancetype)initWithName:(NSString*)name age:(NSString*)age {

self= [superinit];

if(self) {

self.name= name;

self.age= age;

}

returnself;

}

- (void)encodeWithCoder:(NSCoder*)aCoder {

[aCoder encodeObject:self.nameforKey:@"name"];

[aCoder encodeObject:self.ageforKey:@"age"];

}

- (nullableinstancetype)initWithCoder:(NSCoder*)aDecoder {

NSString*name = [aDecoder decodeObjectForKey:@"name"];

NSString*age = [aDecoder decodeObjectForKey:@"age"];

return[selfinitWithName:name age:age];

}

//4.写入图片

UIImage*image = [UIImageimageNamed:@"0"];

NSData*data = UIImagePNGRepresentation(image);

[data writeToFile:testPath atomically:YES];

//4.创建文件对接器

NSFileHandle*handle = [NSFileHandlefileHandleForUpdatingAtPath:textPath];

//此时文件在更新状态下,即可读也可写

[handle seekToFileOffset:3];

//5.开始在偏移量为3的地方写入字符串

[handle writeData:[@"1234"dataUsingEncoding:NSUTF8StringEncoding]];

[handle closeFile];

NSLog(@"%@",textPath);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值