OC基础—文件管理者

  • iOS中NSFileManager文件常用操作整合

  • 前言:"在Objective-C的编程过程当中,常常会涉及到对文件的一些操作,OC也提供了专业的类来进行文件操作,那就是NSFileManager类。通过NSFileManager类我们可以对文件进行创建、删除、移动等操作。"

1.NSFileManager

// 获取电脑桌面的路径(下面是本机路径)
 NSString *desktopPath = @"/Users/hcios/Desktop";
 // 在桌面路径后拼上想要创建的目录名(如:test)
 NSString *directoryPath = [desktopPath stringByAppendingPathComponent:@"test"];
 
 // 创建一个默认的fileManager
 NSFileManager *fileManager = [NSFileManager defaultManager];
 
 // fileManager在filePath路径上创建一个目录
 BOOL b = [fileManager createDirectoryAtPath:directoryPath withIntermediateDirectories:YES attributes:nil error:nil];
 NSLog(@"%@", b ? @"创建成功" : @"创建失败");
 
 // 创建两个文件路径
 NSString *filePath1 = [directoryPath stringByAppendingPathComponent:@"test1.txt"];
 NSString *filePath2 = [directoryPath stringByAppendingPathComponent:@"test2.txt"];
 
 // 创建一个字符串,转成NSData *类型,写入文件
 NSString *contents = @"write something to file...";
 NSData *data = [contents dataUsingEncoding:NSUTF8StringEncoding];
 
 // 判断该路径文件是否存在
 if (![fileManager fileExistsAtPath:filePath1]) {
 // 文件不存在则创建文件,创建的同时写入data
 [fileManager createFileAtPath:filePath1 contents:data attributes:nil];
 }
 if (![fileManager fileExistsAtPath:filePath2]) {
 [fileManager createFileAtPath:filePath2 contents:data attributes:nil];
 }
 
 // 两种方式获取一个目录中的所有文件名(有时会获取到隐藏文件)
 NSArray *fileArray = [fileManager subpathsAtPath:directoryPath];
 fileArray = [fileManager subpathsOfDirectoryAtPath:directoryPath error:nil];
 NSLog(@"fileArray = %@", fileArray);
 
 // 将directoryPath改为当前路径,fileManager会默认在当前路径下操作
 [fileManager changeCurrentDirectoryPath:directoryPath];
 NSString *filePath3 = @"CurrentDirectoryPath.txt";
 if (![fileManager fileExistsAtPath:filePath3]) {
 [fileManager createFileAtPath:filePath3 contents:data attributes:nil];
 }
 fileArray = [fileManager subpathsAtPath:directoryPath];
 NSLog(@"fileArray = %@", fileArray);
 
 // 删除文件
 [fileManager removeItemAtPath:filePath3 error:nil];
 fileArray = [fileManager subpathsAtPath:directoryPath];
 NSLog(@"after remove,fileArray = %@", fileArray);
 
 // 在当前目录下创建一个子目录sub
 [fileManager createDirectoryAtPath:@"sub" withIntermediateDirectories:YES attributes:nil error:nil];
 fileArray = [fileManager subpathsAtPath:directoryPath];
 NSLog(@"add a sub directory,fileArray = %@", fileArray);
 
 // 将test2.txt移动到sub目录中去
 [fileManager moveItemAtPath:filePath2 toPath:[@"sub" stringByAppendingPathComponent:@"test2.txt"] error:nil];
 fileArray = [fileManager subpathsAtPath:directoryPath];
 NSLog(@"after move,fileArray = %@", fileArray);
 
 
 // 将test1.txt复制一份到sub目录中去
 [fileManager copyItemAtPath:filePath1 toPath:[@"sub" stringByAppendingPathComponent:@"test1.txt"] error:nil];
 fileArray = [fileManager subpathsAtPath:directoryPath];
 NSLog(@"after copy,fileArray = %@", fileArray);
 
 // 读取文件中的内容,并将NSData *型数据转成NSString *型数据
 NSData *getData = [fileManager contentsAtPath:filePath1];
 NSString *getString = [[NSString alloc] initWithData:getData encoding:NSUTF8StringEncoding];
 NSLog(@"getString = %@", getString);```

![图片](http://upload-images.jianshu.io/upload_images/1429890-cbf2f30e82f976ca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
***

#2.NSBundle
>NSBundle 类,直接继承 NSObject 类。 这个类的对象,代表了 app 中代码和资源的文件在文件系统里所在的位置,通俗的说,就是定位了程序使用的资源(代码,图形,音乐等数据)在文件系统里的位置,并可以动态的加载、或卸载掉可执行代码。
bundle在英文中的解释是“捆、束”的意思,那么我们可以将NSBundle理解为是将程序的所有资源捆在一起的对象,我们的程序是一个bundle。 在Finder中,一个应用程序看上去和其他文件没有什么区别。但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程序的main bundle,在 Xcode 里,使用应用程序、框架、或者插件的时候,Xcode 会生成对应的资源的目录包。
对于有GUI的应用程序来说,我们可以通过NSBundle来获取资源的路径,但是对于没有GUI的程序(比如OS X的控制台程序),就不能通过NSBundle来获取资源的路径。
+ (NSBundle *)mainBundle;
上面的mainBundle方法返回一个 NSBundle类的对象,这个对象就是一个绝对路径,这个路径保存的是当前可执行的应用程序根目录路径,应用程序在编译之后, 资源文件就直接复制到了根目录下。然后我们根据资源文件的名称和类型就可以获取到它们,例如下面获取一张图片:

// 获取应用程序的main bundle
NSBundle *mainBundle = [NSBundle mainBundle];
// 获取图片的路径(图片为test.jpg)
NSString *imagePath = [mainBundle pathForResource:@"test" ofType:@"jpg"];
// 根据图片的路径获取图片
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
// 将图片放入imageView中
self.imageView.image = image;

***

# 3.NSURL

// 将网络上一张图片的url用字符串格式保存
NSString *URLString = @"http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/cefc1e178a82b901adddeaae738da9773912ef3f.jpg";
// 将字符串格式的url转换成OC中 NSURL *类型的对象
NSURL *url=[NSURL URLWithString:URLString];
// 获取url地址中的图片,保存为NSData *类型的对象
NSData *data = [NSData dataWithContentsOfURL:url];
// 将data转换为UIImage *类型的对象并放入imageView中
self.imageView.image = [UIImage imageWithData:data];

// 获取url中各种参数
NSLog(@"Scheme: %@", [url scheme]);
NSLog(@"Host: %@", [url host]);
NSLog(@"Port: %@", [url port]);
NSLog(@"Path: %@", [url path]);
NSLog(@"Relative path: %@", [url relativePath]);
NSLog(@"Path components as array: %@", [url pathComponents]);
NSLog(@"Parameter string: %@", [url parameterString]);
NSLog(@"Query: %@", [url query]);
NSLog(@"Fragment: %@", [url fragment]);
NSLog(@"User: %@", [url user]);
NSLog(@"Password: %@", [url password]);```


OC基础—文件管理者_第1张图片
图片

  • github

| 项目 | 简介 |
| : | : |
| MGDS_Swif | 逗视视频直播 |
| MGMiaoBo | 喵播视频直播 |
| MGDYZB | 斗鱼视频直播 |
| MGDemo | n多小功能合集 |
| MGBaisi | 高度仿写百思 |
| MGSinaWeibo | 高度仿写Sina |
| MGLoveFreshBeen | 一款电商App |
| MGWeChat | 小部分实现微信功能 |
| MGTrasitionPractice | 自定义转场练习 |
| DBFMDemo | 豆瓣电台 |
| MGPlayer | 一个播放视频的Demo |
| MGCollectionView | 环形图片排布以及花瓣形排布 |
| MGPuBuLiuDemo | 瀑布流--商品展 |
| MGSlideViewDemo | 一个简单点的侧滑效果,仿QQ侧滑 |
| MyResume | 一个展示自己个人简历的Demo |
| GoodBookDemo | 好书 |

  • 1、直播喵播MGMiaoBo下载

OC基础—文件管理者_第2张图片
Snip20161026_15.png

OC基础—文件管理者_第3张图片
Snip20161026_16.png

OC基础—文件管理者_第4张图片
Snip20161026_35.png
  • 2、逗视:逗你玩的直播App,可下载试玩

  • 看下效果

逗视介绍1.gif

逗视介绍2.gif

你可能感兴趣的:(OC基础—文件管理者)