iOS开发:数据存储之文件操作


在ios开发中,如果要访问模拟器中app的文件夹,既可以通过程序本身直接去访问,也可以通过命令行去访问。

在命令行下的访问方法为,首先打开命令,在命令行中,敲入以下命令就可以访问到所指定app的目录,命令如下:

cd/Users/ren/Library/Application\Support/iPhone\Simulator/6.0/Applications/805D7CF0-5DBB-4FCD-9922-0D5C460F510E/

对命令行解读:

cd /Users/主机名/Library/ApplicationSupport/iPhone Simulator/SDK版本号/Applications/应用唯一标示ID/

然后,就可以进入本应用的任意一个文件夹。如果要对文件夹进行拷贝、删除操作,这需要root权限。

第二种,是通过应用程序本身去访问自身的文件夹。并通过程序进行文件的创建、删除、写入和读出等操作。

1.访问指定位置的文件夹。

访问Documents文件夹

NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUSErDomainMask,YES);

NSString *docPaths = [paths objectAtIndex:0];

访问Cache文件夹

NSArray *paths1 =NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

NSString *cachePaths = [paths1 objectAtIndex:0];

访问Library文件夹

NSArray *paths2 =NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);

NSString *libraryPaths = [paths2 objectAtIndex:0];

//NSDocumentDirectory常量就是指定查找的目标是Documents文件夹,而NSUuserDomainMask常量指定从应用程序的主目录中搜索,也就是从Application文件夹的相应程序的文件夹开始找
//YES表示希望获取所有找到的目录的完整路径
    NSString *documentsDirectory = [paths objectAtIndex:0];
//这句话记住就行,每个应用程序文件夹里面只有唯一一个Documents文件夹,但是NSSearch方法会返回很多个,我们只取第一个即可。(Cache和Library与Documents相同)。

2.下面是文件的创建、删除、写入和读出。http://www.bkjia.com

创建与删除:
//创建文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager];
//获取路径
//参数NSDocumentDirectory要获取那种路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];//去处需要的路径

//更改到待操作的目录下
[fileManager changeCurrentDirectoryPath:[documentsDirectorystringByExpandingTildeInPath]];

//创建文件fileName文件名称,contents文件的内容,如果开始没有内容可以设置为nil,attributes文件的属性,初始为nil
[fileManager createFileAtPath:@"fileName" contents:nilattributes:nil];

//删除待删除的文件
[fileManager removeItemAtPath:@"createdNewFile" error:nil];

 

//写入数据:

    //创建文件管理器

    NSFileManager *fileManager = [NSFileManagerdefaultManager];

    //获取路径

    //参数NSDocumentDirectory要获取那种路径

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

    NSString *documentsDirectory = [pathsobjectAtIndex:0];//去处需要的路径

    NSLog(@"documentsDirecrtory:%@",documentsDirectory);

    //更改到待操作的目录下

    [fileManager changeCurrentDirectoryPath:[documentsDirectorystringByExpandingTildeInPath]];

    //创建文件fileName文件名称,contents文件的内容,如果开始没有内容可以设置为nil,attributes文件的属性,初始为nil

    [fileManager createFileAtPath:@"fileone"contents:nil attributes:nil];

    NSString *str = [documentsDirectorystringByAppendingPathComponent:@"fileone"];

    NSLog(@"str:%@",str);

    BOOL isExsit = [fileManagerfileExistsAtPath:str];

    if (isExsit) {

        NSLog(@"文件存在");

    }

    else

    {

        NSLog(@"文件不存在");

    }

    //获取文件路径

    NSString *path = [documentsDirectorystringByAppendingPathComponent:@"fileone"];

    NSLog(@"path:%@",path);

    //待写入的数据

    NSString *temp = @"Hello friend";

    int data0 = 100000;

    float data1 = 23.45f;

    //创建数据缓冲

    NSMutableData *writer = [[NSMutableDataalloc] init];

    //将字符串添加到缓冲中

    [writer appendData:[temp dataUsingEncoding:NSUTF8StringEncoding]];

    //将其他数据添加到缓冲中

    [writer appendBytes:&data0 length:sizeof(data0)];

    [writer appendBytes:&data1 length:sizeof(data1)];

    //将缓冲的数据写入到文件中

    [writer writeToFile:path atomically:YES];

   

    //读取数据:

    int gData0;

    float gData1;

    NSString *gData2;

    NSData *reader = [NSDatadataWithContentsOfFile:path];

    gData2 = [[NSString alloc] initWithData:[readersubdataWithRange:NSMakeRange(0, [temp length])]

                                  encoding:NSUTF8StringEncoding];//得到第一个写入的数据

    [reader getBytes:&gData0 range:NSMakeRange([templength], sizeof(gData0))];//得到第二个写入的数据

    [reader getBytes:&gData1range:NSMakeRange([temp length] + sizeof(gData0), sizeof(gData1))];//得到第三个写入的数据

  //NSMakeRange代表数据范围,getBytes从reader中读取指定范围的数据

    NSLog(@"%@,%d,%f",gData2,gData0,gData1);

    //读取工程中的文件:

    //读取数据时,要看待读取的文件原有的文件格式,是字节码还是文本

    //可以以字节码格式,也可以以文本格式去读取

    //用于存放数据的变量,因为是字节,所以是UInt8

    UInt8 b = 0;

    //获取文件路径

    NSString *path1 = [[NSBundle mainBundle] pathForResource:@"key"ofType:@"txt"];

    //获取数据

    NSData *reader1 = [NSDatadataWithContentsOfFile:path1];

   

    //获取字节的个数

    int length = [reader1 length];

    //获取文本中的字符串

    NSString *ges = [[NSString alloc] initWithData:[reader1subdataWithRange:NSMakeRange(0, length)] encoding:NSUTF8StringEncoding];

    NSLog(@"%@",ges);

   

    NSLog(@"lenghth:%d",length);

    for(int i = 0; i < length; i++) {

        //读取数据

        [reader getBytes:&brange:NSMakeRange(i, sizeof(b))];

        NSLog(@"——–>data%d:%d", i,b);

        }

文件操作demo地址:

免费下载地址在 http://linux.bkjia.com/

用户名与密码都是www.bkjia.com

具体下载目录在 /2013年资料/1月/20日/iOS开发:数据存储之文件操作

相关内容