在ObjC中路径、文件读写等操作是利用字符串来完成的,这里通过几个简单的例子来演示(首先在桌面上新建一个test.txt文件,里面存储的内容是”hello world,世界你好!”)- // main.m
- // FoundationFramework
- //
- // Created by Kenshin Cui on 14-2-16.
- // Copyright (c) 2014年 Kenshin Cui. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- void test1(){
- //读取文件内容
- NSString *path=@"/Users/kenshincui/Desktop/test.txt";
- NSString *str1=[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
- //注意上面也可以使用gb2312 gbk等,例如kCFStringEncodingGB_18030_2000,但是需要用CFStringConvertEncodingToNSStringEncoding转换
- NSLog(@"str1 is %@",str1);
- //结果:str1 is hello world,世界你好!
-
-
-
- //上面我们看到了读取文件,但并没有处理错误,当然在ObjC中可以@try @catch @finnally但通常我们并不那么做
- //由于我们的test.txt中有中文,所以使用下面的编码读取会报错,下面的代码演示了错误获取的过程
- NSError *error;
- NSString *str2=[NSString stringWithContentsOfFile:path encoding:kCFStringEncodingGB_18030_2000 error:&error];//注意这句话中的error变量是**error,就是指针的指针那就是指针的地址,由于error就是一个指针此处也就是error的地址&error,具体原因见下面补充
- if(error){
- NSLog(@"read error ,the error is %@",error);
- }else{
- NSLog(@"read success,the file content is %@",str2);
- }
- //结果:read error ,the error is Error Domain=NSCocoaErrorDomain Code=261 "The file couldn’t be opened using the specified text encoding." UserInfo=0x100109620 {NSFilePath=/Users/kenshincui/Desktop/test.txt, NSStringEncoding=1586}
-
-
-
- //读取文件内容还有一种方式就是利用URl,它除了可以读取本地文件还可以读取网络文件
- //NSURL *url=[NSURL URLWithString:@"file:///Users/kenshincui/Desktop/test.txt"];
- NSURL *url=[NSURL URLWithString:@"http://www.apple.com"];
- NSString *str3=[NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
- NSLog(@"str3 is %@",str3);
- }
- void test2(){
- //下面是文件写入
- NSString *path1=@"/Users/kenshincui/Desktop/test2.txt";
- NSError *error1;
- NSString *str11=@"hello world,世界你好!";
- [str11 writeToFile:path1 atomically:YES encoding:NSUTF8StringEncoding error:&error1];//automically代表一次性写入,如果写到中间出错了最后就全部不写入
- if(error1){
- NSLog(@"write fail,the error is %@",[error1 localizedDescription]);//调用localizedDescription是只打印关键错误信息
- }else{
- NSLog(@"write success!");
- }
- //结果:write success!
- }
- //路径操作
- void test3(){
- NSMutableArray *marray=[NSMutableArray array];//可变数组
- [marray addObject:@"Users"];
- [marray addObject:@"KenshinCui"];
- [marray addObject:@"Desktop"];
- NSString *path=[NSString pathWithComponents:marray];
- NSLog(@"%@",path);//字符串拼接成路径
- //结果:Users/KenshinCui/Desktop
- NSLog(@"%@",[path pathComponents]);//路径分割成数组
- /*结果:
- (
- Users,
- KenshinCui,
- Desktop
- )
- */
- NSLog(@"%i",[path isAbsolutePath]);//是否绝对路径(其实就是看字符串是否以“/”开头)
- //结果:0
- NSLog(@"%@",[path lastPathComponent]);//取得最后一个目录
- //结果:Desktop
- NSLog(@"%@",[path stringByDeletingLastPathComponent]);//删除最后一个目录,注意path本身是常量不会被修改,只是返回一个新字符串
- //结果:Users/KenshinCui
- NSLog(@"%@",[path stringByAppendingPathComponent:@"Documents"]);//路径拼接
- //结果:Users/KenshinCui/Desktop/Documents
- }
- //扩展名操作
- void test4(){
- NSString *path=@"Users/KenshinCui/Desktop/test.txt";
- NSLog(@"%@",[path pathExtension]);//取得扩展名,注意ObjC中扩展名不包括"."
- //结果:txt
- NSLog(@"%@",[path stringByDeletingPathExtension]);//删除扩展名,注意包含"."
- //结果:Users/KenshinCui/Desktop/test
- NSLog(@"%@",[@"Users/KenshinCui/Desktop/test" stringByAppendingPathExtension:@"mp3"]);//添加扩展名
- //结果:Users/KenshinCui/Desktop/test.mp3
- }
- int main(int argc, const char * argv[]) {
- test1();
- test2();
- test3();
- test4();
- return 0;
- }
复制代码 注意:在上面的例子中我们用到了可变数组,下面会专门介绍。
|
|