博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS的相对路径和绝对路径
阅读量:5086 次
发布时间:2019-06-13

本文共 1853 字,大约阅读时间需要 6 分钟。

 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”是错误的,加载文件会失败。

 

转载于:https://www.cnblogs.com/worldworld/archive/2012/07/23/2604541.html

你可能感兴趣的文章
经典入门_排序
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>
二、spring中装配bean
查看>>
VIM工具
查看>>
javascript闭包
查看>>
@Column标记持久化详细说明
查看>>
创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备...
查看>>
mysql8.0.13下载与安装图文教程
查看>>
站立会议08(冲刺2)
查看>>
url查询参数解析
查看>>
http://coolshell.cn/articles/10910.html
查看>>
[转]jsbsim基础概念
查看>>
DIV和SPAN的区别
查看>>
第一次使用cnblogs
查看>>
C#语法糖之 session操作类 asp.net
查看>>
2015 Multi-University Training Contest 3
查看>>
使用Gitblit 在windows 上部署你的Git Server
查看>>
217. Contains Duplicate
查看>>
vue2.0 关于Vue实例的生命周期
查看>>
jenkins 更换主数据目录
查看>>