zoukankan      html  css  js  c++  java
  • iOS

    前言

    	@interface NSFileManager : NSObject
    	@interface NSFileHandle : NSObject <NSSecureCoding>
    
    • 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];
    
  • 相关阅读:
    LeetCode105 从前序遍历和中序遍历构造二叉树
    LeetCode61 扑克牌中的顺子
    LeetCode141 环形链表
    LeetCode103 二叉树的锯齿形层次遍历
    509 斐波那契数
    剑指29 顺时针打印矩阵
    malloc分配内存2种方式:brk和mmap
    Python学习第139天(Django的分页器(paginator))
    Python学习第138天(Django的用户认真组件)
    Python学习第137天(admin部分参数补充)
  • 原文地址:https://www.cnblogs.com/QianChia/p/5782855.html
Copyright © 2011-2022 走看看