-
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:https://img.haomeiwen.com/i1429890/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]);```
图片
-
github
| 项目 | 简介 |
| : | : |
| MGDS_Swif | 逗视视频直播 |
| MGMiaoBo | 喵播视频直播 |
| MGDYZB | 斗鱼视频直播 |
| MGDemo | n多小功能合集 |
| MGBaisi | 高度仿写百思 |
| MGSinaWeibo | 高度仿写Sina |
| MGLoveFreshBeen | 一款电商App |
| MGWeChat | 小部分实现微信功能 |
| MGTrasitionPractice | 自定义转场练习 |
| DBFMDemo | 豆瓣电台 |
| MGPlayer | 一个播放视频的Demo |
| MGCollectionView | 环形图片排布以及花瓣形排布 |
| MGPuBuLiuDemo | 瀑布流--商品展 |
| MGSlideViewDemo | 一个简单点的侧滑效果,仿QQ侧滑 |
| MyResume | 一个展示自己个人简历的Demo |
| GoodBookDemo | 好书 |
Snip20161026_16.png
Snip20161026_35.png
-
2、逗视:逗你玩的直播App,可下载试玩
-
看下效果
逗视介绍2.gif
网友评论