ObjC第七节:文件操作

文件操作
摘要由CSDN通过智能技术生成

文件操作

1、简介

2、NSCoding(归档解档)

3、管理文件和目录







文件管理

//写文件,我们之前使用各种数据结构来存储数据:NSString,NSData,NSDictionary,NSArray等,他们都是有一个writeToFile方法用来写文件的

//纯文本:没有任何格式的数据
//非纯文本:有修饰的数据(字体大小,字体颜色等)

//数组只能将如下类型写入文件,如果包含其他对象,将写入失败:NSNumber,NSString,NSData,NSDate,NSArray,NSDictionary
//数组、字典写入的文件叫做属性文件,可以使用xcode进行编辑

//现在有这样的场景,第一次把字符串写入到文件中,当我们修改字符串之后,再次写入的时候,但是可能会写入失败
//但是之前的内容也有可能丢失,因为每次在写入新的内容的时候,会剪切之前的内容,所以这里就有可能新的没有写
//成功,旧的文件也丢失了
//所以这时候atomically参数:
//YES:会将新内容先写入到一个缓存文件中,如果写入缓存成功之后,这时候就将这个缓存文件替换旧文件,这样就很安全了

#import <Foundation/Foundation.h>
#import "Baby.h"
int main(int argc, const char * argv[])
{
    @autoreleasepool
    {
        NSFileManager * fm = [NSFileManager defaultManager];
        //获取当前目录(相对路径)
        NSString * strp = [fm currentDirectoryPath];
        NSLog(@"%@", strp);
        //设置绝对路径
        NSString * path = @"/Users/len/Desktop";
        //通过相对路径设置文件路径
        NSString * path1 = [strp stringByAppendingString:@"/1111.txt"];
        //创建目录(可以顺便创建文件)
        //[[NSFileManager defaultManager] createDirectoryAtPath:path1 withIntermediateDirectories:YES attributes:nil error:nil];
        //创建文件
        [fm createFileAtPath:path1 contents:nil attributes:nil];
        //文件写入(字符)
        [strp writeToFile:path1 atomically:YES encoding:NSUTF8StringEncoding error:nil];
        //文件读取(字符串)
        NSString * str1 = [NSString stringWithContentsOfFile:path1 encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"%@", str1);
        //文件读取(二进制流)
        NSLog(@"%@", [fm contentsAtPath:path1]);//NSData
        //文件写入(数组)
        NSArray * arr = @[@"11", @"22", @"aa"];
        [arr writeToFile:path1 atomically:YES];
        //文件读取(数组)
        NSArray * arr1 = [NSArray arrayWithContentsOfFile:path1];
        NSLog(@"%@", arr1);
        //文件的属性字典
        NSDictionary * dic = [fm attributesOfItemAtPath:path1 error:nil];
        //字典的键NSFileSize对应文件的大小
        int size = [[dic objectForKey:NSFileSize] intValue];
        //文件读取(二进制流转化为字符串)(输出文件的所有内容而不仅仅是存入的对象的值)
        NSData * data = [fm contentsAtPath:path1];
        NSString * strData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@, %d, %@, %@", dic, size, data, strData);
        
        //查看文件是否存在、新建、拷贝、删除
        NSError * error ;
        if ([fm fileExistsAtPath:path1])
        {
            [fm copyItemAtPath:path1 toPath:[path stringByAppendingString:@"/2222.txt"] error:nil];//如果没有2222这个文件,会自动创建。此处文件前的/,代表着目录的层次(本级还是上一级)
            [fm createFileAtPath:[strp stringByAppendingString:@"/3333.docx"] contents:nil attributes:nil];  //如果没有则自动创建,docx成功
            [fm copyItemAtPath:path1 toPath:[strp stringByAppendingString:@"/3333.docx"] error: &error];//docx可能无法写入?
            [fm removeItemAtPath:path1 error:nil];  //删除1111
        }
        
        
        
        
        
        
//        NSString * path1 = [NSString stringWithFormat:@"%@/Desktop/1111.txt", NSHomeDirectory()];
//        //路径的组成部分
//        NSString * pathPart = [path1 pathComponents];  //第一个是"/",也是路径的一部分
//        //路径的最后组成部分
//        NSString * pathLast = [path1 lastPathComponent];
//        //获取扩展名
//        NSString * pathEX = [path1 pathExtension];
//        //删除扩展名(.txt被删除了)
//        NSString * pathDelEX = [
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值