zoukankan      html  css  js  c++  java
  • ios相对路径与绝对路径的转化NSBundle

    转:http://blog.csdn.net/zi2xuan/article/details/7319210

     iOS程序有固定的文件访问限制,只能在自己的沙盒内。


      UIImage *img=[UIImage imageNamed:@"cellicon.png"];


      这段代码从相对路径加载了一个png图片资源作为UIImage对象,没有任何问题。因为它在内部已经偷偷得帮你把路径转化为相对路径了,你还不知道吧!

      接下来,如果要加载一些自定义格式的文件或者数据,就会出现相对路径和绝对路径的问题。比如

      NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:newPath];


      newPath为一个字符串路径,这里的路径你却不能像上面那样

      NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:@"test.txt"];


      这样系统是找不到文件的,因为这里需要的是文件的绝对路径,而@“test.txt”完全是无效的。

      这个时候就需要NSBundle的帮忙了,这个类专门用来负责路径转化等等功能那。大家都知道ios项目虽然在xcode下可以创建文件夹结构,但是实际上它是没有文件结构概念的,所以此时假如要加载放在项目目录下的test.txt文件,完整的代码应该是这样


    方法1:


      NSString *newPath=[NSString stringWithFormat:@"%@%@%@",[[NSBundle mainBundle]resourcePath],@"/",path];

      NSLog(@"url=%@",newPath);

      NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:newPath];


    此处[NSBundle mainBundle]是获得NSBundle的一个单例对象,次单例对象 已经设置了默认的resourcePath,也就是你的app打包后的路径,[NSBundle mainBundle]resourcePath]就是获得这个完整的打包后的app路径,但你的test.txt文件并不在这个目录,而是在app内部,这时就需要拼接路径字符串,[NSString stringWithFormat:@"%@%@%@",[[NSBundle mainBundle]resourcePath],@"/",path];这么简单的字符串拼接,我就不多说了,

    控制台输出app路径resourcePath:


    /Users/zouzouyanghong/Library/Application Support/iPhone Simulator/5.0/Applications/76116A6A-572D-43AE-AE78-17D7A88DCAFC/JFitnessProduct.app

    控制台输出拼接后完整文件绝对路径:

    /Users/zouzouyanghong/Library/Application Support/iPhone Simulator/5.0/Applications/76116A6A-572D-43AE-AE78-17D7A88DCAFC/JFitnessProduct.app/test.jat


    方法2:

      NSString *newPath=[[NSBundle mainBundle] pathForResource:@"test" ofType:@"txt"];

      NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:newPath];

    [[NSBundle mainBundle] pathForResource:@"test" ofType:@"jat"];前面的就不再介绍了,pathForResource方法有两个参数,前面这个为文件名,后面那个ofType就是文件类型,也就是文件后缀。这里把文件名和后缀分开了,如果这是你得到的是一个完整的文件名如:@“test.txt”,那么你得自己想办法把文件名和后缀分开了。

    要特别说明,此处的文件后缀是不需要“.”的,如果写成@“.jat”是错误的,加载文件会失败


    话外题:有必要介绍一下打开指定路径得方法,先打开Finder就是这个东西,上面菜单栏会出现Finder得相关菜单,选择“前往”->再选择这个在弹出得窗口中输入得到得resourcePath路径,你就能看到自己得app了,你说怎么得到?自己想去。







  • 相关阅读:
    HDU 2852 KiKi's K-Number (主席树)
    HDU 2089 不要62
    Light oj 1140 How Many Zeroes?
    Bless You Autocorrect!
    HDU 6201 transaction transaction transaction
    HDU1561 The more ,The better (树形背包Dp)
    CodeForces 607B zuma
    POJ 1651 Mulitiplication Puzzle
    CSUOJ 1952 合并石子
    Uva 1599 Ideal path
  • 原文地址:https://www.cnblogs.com/jackljf/p/3589288.html
Copyright © 2011-2022 走看看