iOS基础知识:Objective-C 之 沙盒与文件管理

沙盒与文件管理


1、沙盒:
———内部文件夹框架:

/沙盒/Doucuments 用于存放非隐秘文件(可由程序写入,系统不会自动回收)
/沙盒/library/cashes 缓存文件(可由程序写入,系统会不定期回收)
/沙盒/library/Preference 不能由程序写入
/沙盒/tmp 用于存放临时文件(可由程序写入,系统会不定期回收)

这里写图片描述

2、文件管理(NSFileManager)

用manager检查文件是否存在,并创建一个新的文件

    NSString *filePath = [NSString stringWithFormat:@"%@/Documents/test1.txt",NSHomeDirectory()];
    NSLog(@"filePath:%@",filePath);
    NSFileManager *manager = [NSFileManager defaultManager];
    if([manager fileExistsAtPath:filePath] == NO){
        [manager createFileAtPath:filePath contents:nil attributes:nil];
    }

一个文件可读、可写、可执行,可删除的判断

    [manager isReadableFileAtPath:filePath];//可读
    [manager isWritableFileAtPath:filePath];//可写
    [manager isExecutableFileAtPath:filePath];//可执行
    [manager isDeletableFileAtPath:filePath];//可删除

查看文件属性

NSDictionary *filePro = [manager attributesOfItemAtPath:filePath error:nil];
    NSLog(@"%@",filePro);
输入结果为一个属性的字典
    NSFileCreationDate = "2015-09-11 12:55:27 +0000";
    NSFileExtensionHidden = 0;
    NSFileGroupOwnerAccountID = 20;
    NSFileGroupOwnerAccountName = staff;
    NSFileModificationDate = "2015-09-11 12:55:27 +0000";
    NSFileOwnerAccountID = 501;
    NSFilePosixPermissions = 420;
    NSFileReferenceCount = 1;
    NSFileSize = 179;
    NSFileSystemFileNumber = 3461272;
    NSFileSystemNumber = 16777218;
    NSFileType = NSFileTypeRegular;

文件的复制,移动,删除


    [manager copyItemAtPath:filePath toPath:filePath1 error:nil];   //复制
    [manager moveItemAtPath:filePath toPath:filePath1 error:nil];   //移动
    [manager removeItemAtPath:filePath error:nil];                  //删除

3、文件读写(NSFileHandle)
从新浪网上读出主页数据写入指定的文件中
下载网页内容,存于data中

    NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.sina.com"]];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        if (error) {
            NSLog(@"error:%@",error);
        }else{
            NSLog(@"response:%@",response);
            [self writeToFileWithData:data];
        }
    }];

    [dataTask resume];

writeToFileWithData:的实现如下:

- (void)writeToFileWithData:(NSData *)data{
    //open file by updating mode(read and write mode)
    NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:_filePath];
    //creat a data and write to file
    [fileHandle writeData:data];
    //close file
    [fileHandle closeFile];

}

此处是以读写方式打开,此外还有可以只读方式打开,只写方式打开
打开文件,如下图,与预期相同:
这里写图片描述

向指定的位置读写文件:
基于上面的代码所生成的这个文件,先直接进行写入”hello world”

    NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:_filePath];
    NSData *data = [@"hello world" dataUsingEncoding:NSUTF8StringEncoding];
    [fileHandle writeData:data];

结果如下:
与之前相比,直接覆盖了前面的11个字符
直接覆盖了前面的11个字符

如果想要向指定点读写可用:

[fileHandle seekToFileOffset:100];

这是将光标移动到100处,如果再调用writeData时,就是从100处开始读写内容

此外还有其他常用的方法
将光标移动到文件末尾

[fileHandle seekToEndOfFile];

将文件延长或剪切到指定长度

[fileHandle truncateFileAtOffset:50];

从当前光标开始读取指定长度的数据

NSData *data = [fileHandle readDataOfLength:20];

从当前光标开始读取数据直到文件末尾

NSData *data = [fileHandle readDataOfLength:20];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值