博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS - OC NSFileManager 文件管理
阅读量:5173 次
发布时间:2019-06-13

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

前言

@interface NSFileManager : NSObject    @interface NSFileHandle : NSObject 
  • NSFileManager 是 Foundation 框架中用来管理和操作文件、目录等文件系统相关联内容的类。

1、路径操作

// 文件管理器对象,单例类对象    NSFileManager *nfManager = [NSFileManager defaultManager];            NSURL *folderUrl = [NSURL URLWithString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/testFolder"]];    NSURL *filerUrl = [NSURL URLWithString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/testFile.txt"]];            NSURL *srcUrl = [NSURL URLWithString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/testFile.txt"]];    NSURL *dstUrl = [NSURL URLWithString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/testFolder/testFile.txt"]];            // 用于保存错误信息    NSError *errorInfo = nil;            // 创建文件夹    /*        -(BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates                                                                        attributes:(NSDictionary *)attributes                                                                             error:(NSError **)error;                 path:文件夹路径        createIntermediates:是否连同上一级路径一起创建,NO 并且上一级文件路径不存在时会创建失败。        attributes:文件夹属性,nil 系统默认属性        error:保存错误原因        BOOL:文件夹创建成功时返回值为 YES    */            BOOL bl1 = [nfManager createDirectoryAtPath:[folderUrl path] withIntermediateDirectories:YES                                                                                   attributes:nil                                                                                        error:&errorInfo];        // 创建文件    /*         -(BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;                 path:文件路径        data:文件内容,nil 空        attr:文件属性,nil 系统默认属性        BOOL:文件创建成功时返回值为 YES    */            BOOL bl2 = [nfManager createFileAtPath:[filerUrl path]                                   contents:[@"北京欢迎您" dataUsingEncoding:NSUTF8StringEncoding]                                 attributes:nil];        // 拷贝文件    /*        如果 dstUrl 路径文件已存在,该方法会终止拷贝,并返回 false。        如果 srcUrl 的最后一部分是符号链接,那么只有链接会被拷贝到新路径。    */        BOOL bl3 = [nfManager copyItemAtPath:[srcUrl path] toPath:[dstUrl path] error:nil];        // 删除文件    /*        删除成功或者 url 为 nil 时返回 true,如果发生错误返回 false。如果使用 delegate         终止了删除文件,则返回 true,如果使用 delegate 终止了删除目录,则返回 false    */        BOOL bl4 = [nfManager removeItemAtPath:[dstUrl path] error:nil];        // 移动文件    /*        如果 dstUrl 路径文件已存在,该方法会终止移动,并返回 false。如果 srcUrl 的最后         一部分是符号链接,那么只有链接会被移动到新路径。链接所指向的内容仍然保持在现有的位置。    */    BOOL bl5 = [nfManager moveItemAtPath:[srcUrl path] toPath:[dstUrl path] error:nil];        // 查找满足指定条件的路径        // 返回其 URL。该方法不但可以获得标准系统目录,还可以用来创建临时路径        NSURL *url1 = [nfManager URLForDirectory:NSDocumentDirectory                                         inDomain:NSUserDomainMask                                appropriateForURL:nil                                           create:YES                                            error:nil];        // 返回所有满足条件的路径列表        NSArray *urlObjs = [nfManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];        NSURL *url2 = urlObjs[0];        // 查询指定路径下的所有子路径    NSArray *urls1 = [nfManager subpathsAtPath:[url1 path]];    NSArray *urls2 = [nfManager subpathsOfDirectoryAtPath:[url1 path] error:nil];        // 浅遍历        // 返回指定目录下的文件、子目录及符号链接的列表        NSArray *contentsDir1 = [nfManager contentsOfDirectoryAtPath:[url1 path] error:nil];            // 返回的是文件全路径        NSArray *contentsDir2 = [nfManager contentsOfDirectoryAtURL:url1                                          includingPropertiesForKeys:nil                                                             options:NSDirectoryEnumerationSkipsHiddenFiles                                                               error:nil];    // 深遍历        // 返回指定目录下的所有文件及其子目录下的所有元素路径        NSDirectoryEnumerator *enumeratorDir1 = [nfManager enumeratorAtPath:[url1 path]];                // 返回的是文件全路径        NSDirectoryEnumerator *enumeratorDir2 = [nfManager enumeratorAtURL:url1                                                 includingPropertiesForKeys:nil                                                                    options:NSDirectoryEnumerationSkipsHiddenFiles                                                               errorHandler:nil];                // 枚举遍历深层遍历        NSDirectoryEnumerator *dEnu = [nfManager enumeratorAtPath:[url1 path]];                id obj = nil;        while (obj = [dEnu nextObject]) {            NSLog(@"%@", obj);        }    // 显示路径的本地化名称    /*        // 如果指定的文件或目录不存在,会返回 path 本身    */    NSString *displayName = [nfManager displayNameAtPath:[url1 path]];        // 获取指定路径的各种属性    NSDictionary *attributes = [nfManager attributesOfItemAtPath:[url1 path] error:nil];        // 获取指定路径文件的内容数据    /*        如果指定路径为目录或发生错误,返回 nil    */    NSData *data = [nfManager contentsAtPath:[[url1 path] stringByAppendingString:@"/test.txt"]];        // 获取当前路径    NSString *currentPath = [nfManager currentDirectoryPath];        // 更改当前路径    /*        /Users/JHQ0228/Desktop/Debug    */    BOOL bl6 = [nfManager changeCurrentDirectoryPath:[NSHomeDirectory() stringByAppendingString:@"/Desktop/Debug"]];        // 获取临时工作路径    /*        获取系统中可以用来创建临时文件的目录路径名,一定要在完成任务之后将在其中创建的文件删除    */    NSString *tempPath = NSTemporaryDirectory();        // 获取用户主路径(沙盒路径)    NSString *homePath = NSHomeDirectory();        // 获取指定用户的主路径    /*        NSUserName(); 获取当前用户的登录名。NSFullUserName(); 获取当前用户完整用户名    */    NSString *userHomePath = NSHomeDirectoryForUser(NSUserName());        // 获取用户 Documents 路径    NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];        // 获取 app 包路径    NSString *bundlePath = [[NSBundle mainBundle] bundlePath];        // 创建一个新路径    BOOL bl8 = [nfManager createDirectoryAtPath:[NSHomeDirectory() stringByAppendingString:@"/Desktop/Debug1"]                     withIntermediateDirectories:YES                                      attributes:nil                                           error:nil];        // 判断文件是否为路径(flag 中存储结果 YES/NO)        // 存储判断结果        BOOL result;                BOOL bl9 = [nfManager fileExistsAtPath:[NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"]                                    isDirectory:&result];        // 判断是否是根路径(绝对路径)    /*        路径以 “/” 开始的为根路径    */    BOOL bl10 = [@"../Desktop/test.txt" isAbsolutePath];        // 获取最后一个路径    NSString *lastPath = [[NSHomeDirectory() stringByAppendingString:@"/Desktop"] lastPathComponent];        // 删除最后一个路径    NSString *deleteLastPath = [[NSHomeDirectory() stringByAppendingString:@"/Desktop"] stringByDeletingLastPathComponent];        // 拼接一个路径    NSString *appendingPath = [[NSHomeDirectory() stringByAppendingString:@"/Desktop"] stringByAppendingPathComponent:@"testFolder"];        // 文件路径分割    NSArray *pathArray = [[NSHomeDirectory() stringByAppendingString:@"/Desktop"] pathComponents];        // 文件路径组合    NSString *pathString = [NSString pathWithComponents:pathArray];        // 将路径中的代字符 ~ 扩展成用户主目录或指定用户的主目录        // 特殊的代字符 ~ 是用户主目录(如:/Users/JHQ0228)的缩写,~linda 表示用户 linda 主目录的缩写        NSString *path1 = @"~/Desktop/test.txt";        // /Users/JHQ0228/Desktop/test.txt        NSString *mainPath = [path1 stringByExpandingTildeInPath];        // 解析路径中的符号链接        // /..    上一级目录        NSString *path2 = @"~/../Debug";            // 通过解析 ~(用户主目录)、..(父目录) 、.(当前目录)和符号链接来标准化路径        NSString *appPath1 = [path2 stringByResolvingSymlinksInPath];            // NSHomeDirectory()/..    NSHomeDirectory() 的上一级目录        NSString *path3 = [NSString stringWithFormat:@"%@/../Debug", NSHomeDirectory()];        NSString *appPath2 = [path3 stringByStandardizingPath];        // 获取文件拓展名    NSString *getExtension = [@"/Desktop/test.txt" pathExtension];        // 删除文件拓展名    NSString *deleteExtension = [@"/Desktop/test.txt" stringByDeletingPathExtension];        // 拼接文件拓展名    NSString *appendingExtension = [@"/Desktop/test.txt" stringByAppendingPathExtension:@"doc"];        // 获取文件大小        NSDictionary *dict = [[NSFileManager defaultManager] attributesOfItemAtPath:filerUrl.path error:NULL];    long long fileSize = [dict[NSFileSize] longLongValue];    long long fileSize = [dict fileSize];

2、路径判断

NSFileManager *nfManager = [NSFileManager defaultManager];    NSURL *url1 = [nfManager URLForDirectory:NSDocumentDirectory                                     inDomain:NSUserDomainMask                            appropriateForURL:nil                                       create:YES                                        error:nil];        // 判断路径是否存在    /*        如果当前路径以~开头,需使用 NSString 的 stringByExpandingTildeInPath 方法进行处理,否则会返回 false    */    BOOL bl1 = [nfManager fileExistsAtPath:[url1 path]];        // 判断指定路径是否有可读权限    BOOL bl2 = [nfManager isReadableFileAtPath:[url1 path]];        // 判断指定路径是否有可写权限    BOOL bl3 = [nfManager isWritableFileAtPath:[url1 path]];        // 判断指定路径是否有可执行权限    BOOL bl4 = [nfManager isExecutableFileAtPath:[url1 path]];        // 判断指定路径是否有可删除权限    BOOL bl5 = [nfManager isDeletableFileAtPath:[url1 path]];        // 判断两个指定路径的内容是否相同    BOOL bl6 = [nfManager contentsEqualAtPath:[url1 path] andPath:[[url1 path] stringByAppendingString:@"/test.txt"]];

3、文件操作

NSURL *fileUrl = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0];        // 文件打开            NSFileHandle *nfHandle = [NSFileHandle fileHandleForUpdatingAtPath:[[fileUrl path] stringByAppendingString:@"/test.txt"]];                NSFileHandle *nfHandle1 = [NSFileHandle fileHandleForReadingAtPath:[[fileUrl path] stringByAppendingString:@"/test.txt"]];                NSFileHandle *nfHandle2 = [NSFileHandle fileHandleForWritingAtPath:[[fileUrl path] stringByAppendingString:@"/test.txt"]];        // 文件句柄偏移量            // 获取文件句柄指针的偏移量        unsigned long long offSetNum1 = [nfHandle offsetInFile];                    // 将偏移量移到文件末尾,返回移动后的指针偏移量        unsigned long long offSetNum2 = [nfHandle seekToEndOfFile];                    // 将偏移量指向特定的位置        [nfHandle seekToFileOffset:0];        // 文件读取            // 获取当前文件句柄的可用数据,获取后指针移到文件末尾        NSData *availableData = [nfHandle availableData];                    // 获取从当前指针位置到文件结束的所有数据,获取后指针移到文件末尾        NSData *data1 = [nfHandle readDataToEndOfFile];                    // 获取从当前指针位置开始读取的 length 长度的数据内容,获取后指针移到文件读取到的位置        NSData *data2 = [nfHandle readDataOfLength:10];            // 文件写入            // 从当前指针位置写入数据到文件        [nfHandle writeData:[@"你好" dataUsingEncoding:NSUTF8StringEncoding]];            // 文件关闭            // 关闭文件        [nfHandle closeFile];        // 文件比较            NSFileManager *nfManager = [NSFileManager defaultManager];                    // 文件路径        NSString *filePath1 = [NSHomeDirectory() stringByAppendingString:@"/Desktop/file1.txt"];        NSString *filePath2 = [NSHomeDirectory() stringByAppendingString:@"/Desktop/file2.txt"];                    [nfManager createFileAtPath:filePath1                            contents:[@"北京欢迎您" dataUsingEncoding:NSUTF8StringEncoding]                          attributes:nil];                                 [nfManager createFileAtPath:filePath2                            contents:[@"北京欢迎" dataUsingEncoding:NSUTF8StringEncoding]                          attributes:nil];                    // 比较两个文件的内容是否相等        BOOL bl = [nfManager contentsEqualAtPath:filePath1 andPath:filePath2];

转载于:https://www.cnblogs.com/QianChia/p/5782855.html

你可能感兴趣的文章
Xcode5和ObjC新特性
查看>>
CSS属性值currentColor
查看>>
Real-Time Rendering 笔记
查看>>
多路复用
查看>>
【UVA】434-Matty's Blocks
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
使用Reporting Services时遇到的小问题
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
有关快速幂取模
查看>>
NOI2018垫底记
查看>>
注意java的对象引用
查看>>
C++ 面向对象 类成员函数this指针
查看>>