Swift&OC 文件夹和文件的详细操作 您所在的位置:网站首页 swift读取本地文档不存在 Swift&OC 文件夹和文件的详细操作

Swift&OC 文件夹和文件的详细操作

2024-07-10 15:54| 来源: 网络整理| 查看: 265

文件管理器(NSFileManager/FileManager):此类主要是对文件进行的操作(创建/删除/改名等)以及文件信息的获取。

文件连接器(NSFileHandle/FileHandle):此类主要是对文件内容进行读取和写入操作。

一、沙盒以及组成部分

iOS应用程序只能对自己创建的文件系统读取文件,这个"独立","封闭","安全"的空间,称之为沙盒。

1.1、Home目录(应用程序包)

整个应用程序各文档所在的目录,包含了所有的资源文件和可执行文件

1.2、Documents

保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录

需要保存由"应用程序本身"产生的文件或者数据,例如: 游戏进度,涂鸦软件的绘图

目录中的文件会被自动保存在 iCloud

注意: 不要保存从网络上下载的文件,否则会无法上架!

1.3、tmp

保存应用运行时所需要的临时数据或文件,"后续不需要使用",使用完毕后再将相应的文件从该目录删除。

应用没有运行,系统也可能会清除该目录下的文件

iTunes不会同步备份该目录

重新启动手机, tmp 目录会被清空

系统磁盘空间不足时,系统也会自动清理

1.4、Library/Cache

保存应用运行时生成的需要持久化的数据,iTunes同步设备时不备份该目录。一般存放体积大、不需要备份的非重要数据

保存临时文件,"后续需要使用",例如: 缓存的图片,离线数据(地图数据)

系统不会清理 cache 目录中的文件

就要求程序开发时, "必须提供 cache 目录的清理解决方案"

1.5、Library/Preference

保存应用的所有偏好设置,IOS的Settings应用会在该目录中查找应用的设置信息。iTunes

用户偏好,使用 NSUserDefault 直接读写!

如果想要数据及时写入硬盘,还需要调用一个同步方法 synchronize()

1.6.程序.app,与另三个路径的父路径不同

这是应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动

二、对文件以及文件夹的操作

2.1、获取各个目录的路径

2.1.1、HomeDirectory

1 2 3 4 OC:                 NSString *filePath = NSHomeDirectory(); Swift: let homePath = NSHomeDirectory()

2.1.2、Documents

1 2 3 4 5 6 7 8 9 10 11 OC:                 方法一 NSString * documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0];  方法二 NSString * documentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; Swift: 方法1 let documentsPaths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) let documentsPath = documentPaths[0] 方法2 let documentsPath = NSHomeDirectory()+"/Documents"

2.1.3、Caches

1 2 3 4 5 6 7 8 9 10 11 OC:   方法一 NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 方法二 NSString *cachesPath= [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Caches"];              Swift: 方法1 let cachePaths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.cachesDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) let cachePath = cachePaths.last 方法2 let cachePath = NSHomeDirectory()+"/Library/Caches"

2.1.4、Library

1 2 3 4 5 6 7 8 9 10 11 OC:   方法一 NSString * libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 方法二 NSString * libraryPath = [NSHomeDirectory() stringByAppendingPathComponent:@"/Library"]; Swift: 方法1 let libraryPaths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.libraryDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) let libraryPath = libraryPaths[0] 方法2 let libraryPath = NSHomeDirectory()+"/Library"

2.1.5、tmp

1 2 3 4 5 6 7 8 9 10 OC:   方法一 NSString *tempPath = NSTemporaryDirectory(); 方法二 NSString * tempPath = [NSHomeDirectory() stringByAppendingPathComponent:@"/tmp"]; Swift: 方法1 let tempPath = NSTemporaryDirectory() 方法2 let tempPath = NSHomeDirectory()+"/tmp"

2.2、根据传件来的路径创建文件夹 创建文件目录(蓝色的,文件夹和文件是不一样的)

应用程序目录, Caches、Library、Documents目录文件夹下创建文件夹(蓝色的)

下面以Documents为例创建JKFile为例

以Documents为例创建JKFile为例

OC

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 NSString *filePath=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/JKFile"]; - (NSString *)jKCreateDir:folderName{       NSString *filePath=[NSHomeDirectory() stringByAppendingPathComponent: folderName];     NSFileManager *fileManager = [NSFileManager defaultManager];     BOOL isDir = NO;     // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录     BOOL existed = [fileManager fileExistsAtPath:filePath isDirectory:&isDir];       if ( !(isDir == YES && existed == YES) ) {         // 不存在的路径才会创建       [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];     }   return filePath; }

Swift:

1 2 3 4 5 6 7 8 9 10 11 12 13 let jKFilePath = NSHomeDirectory() + "/Documents/JKFile"; func jKCreateFolder(folderName: NSString) -> NSString {    let fileManager: FileManager = FileManager.default    let filePath = "\(folderName)"    let exist = fileManager.fileExists(atPath: filePath)    // 不存在的路径才会创建    if (!exist) {       //withIntermediateDirectories为ture表示路径中间如果有不存在的文件夹都会创建     try! fileManager.createDirectory(atPath: filePath,withIntermediateDirectories: true, attributes: nil)     }   return filePath as NSString  }

2.3、删除文件夹(先判断文件夹存不存在)

OC

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 NSString *filePath=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/JKFile"]; - (void)jKRemovefolder:(NSString *)filePathName {     // filePath: 文件/目录的路径       NSFileManager *fileManager = [NSFileManager defaultManager];     NSString *filePath = [NSString stringWithFormat:@"%@",filePathName];     BOOL isDir = NO;     // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录     BOOL existed = [fileManager fileExistsAtPath:filePath isDirectory:&isDir];       if ( !(isDir == YES && existed == YES) ) {       // 不存在的路径才会创建       return;     }    //文件夹    [fileManager removeItemAtPath:filePath error:nil]; }

Swift:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 let jKFilePath = NSHomeDirectory() + "/Documents/JKFile"; func jKRemovefolder(folderName: NSString){    let fileManager: FileManager = FileManager.default    let filePath = "\(folderName)"    let exist = fileManager.fileExists(atPath: filePath)    // 查看文件夹是否存在,如果存在就直接读取,不存在就直接反空    if (exist) {             try! fileManager.removeItem(atPath: filePath)          }else{            // 不存在就不做什么操作了    } }

2.4、删除文件

OC

1 2 3 4 5 6 7 - (void)jKRemovefile:(NSString *)filePathName {      // filePath: 文件/目录的路径      NSFileManager *fileManager = [NSFileManager defaultManager];      NSString *filePath = [NSString stringWithFormat:@"%@",filePathName];     //移除文件    [fileManager removeItemAtPath:filePath error:nil]; }

Swift:

1 2 3 4 5 6 func jKRemovefile(folderName: NSString){    let fileManager: FileManager = FileManager.default    let filePath = "\(folderName)"    //移除文件    try! fileManager.removeItem(atPath: filePath)  }

2.5、深度遍历(搜索文件夹)

2.5.1、深度搜索遍历一(subpathsAtPath)深度遍历,会递归遍历子文件夹(包括符号链接,所以要求性能的话用enumeratorAtPath)

获取某个文件下的所有文件的名字

OC

1 2 3 4 5 6 7 8 9 10 NSString *filePath = NSHomeDirectory(); -(NSArray *)jKGetAllFileNames:(NSString *)folderName {   NSFileManager *fileManager = [NSFileManager defaultManager];   // 取得一个目录下得所有文件名   NSArray *files = [fileManager subpathsAtPath:[self jKCreateFolder:folderName]];   //NSLog(@"pdf名字的数量=%ld 数组=%@",files.count,files);     return files; }

Swift:

1 2 3 4 5 6 7 8 9 10 11 12 13 let jKFilePath = NSHomeDirectory(); func jKGetAllFileNames(folderName: NSString) -> NSArray{     let filePath = "\(folderName)"   let exist = fileManager.fileExists(atPath: filePath)   // 查看文件夹是否存在,如果存在就直接读取,不存在就直接反空   if (exist) {      let subPaths = fileManager.subpaths(atPath: folderName as String)       return subPaths! as NSArray   }else{       return []   } }

2.5.2、深度遍历二,会递归遍历子文件夹(但不会递归符号链接)

OC

1 2 3 4 5 6 7 8 9 // folderNmae:文件夹的名字 -(NSArray *)jKDeepSearchEnumeratorAllFileNames:(NSString *)folderName{       NSFileManager *fileManager = [NSFileManager defaultManager];     // 取得一个目录下得所有文件名     NSDirectoryEnumerator *files = [fileManager enumeratorAtPath:[self jKCreateFolder:folderName]];     //NSLog(@"pdf名字的数量=%ld 数组=%@",files.count,files);     return files.allObjects;  }

Swift:

1 2 3 4 5 6 7 8 9 10 11 12 func jKDeepSearchAllFiles(folderName: NSString) -> NSArray {     let filePath = "\(folderName)"     let exist = fileManager.fileExists(atPath: filePath)     // 查看文件夹是否存在,如果存在就直接读取,不存在就直接反空     if (exist) {        let contentsOfPathArray = fileManager.enumerator(atPath: filePath)        return contentsOfPathArray!.allObjects as NSArray     }else{        return []     } }

2.6、对指定路径执行浅搜索,返回指定目录路径下的文件、子目录及符号链接的列表(只寻找一层)

读取指定目录路径下的文件、子目录及符号链接的列表(只寻找一层)

OC

1 2 3 4 5 6 7 8 9 /**对指定路径执行浅搜索,返回指定目录路径下的文件、子目录及符号链接的列表(只寻找一层)*/      NSString *customPath = [NSString stringWithFormat:@"%@",[JKFilePathOperationExtension jKHomeDirectory]]; -(NSArray *)jKShallowSearchAllFiles:(NSString *)filePath{        NSFileManager *fileManager = [NSFileManager defaultManager];      NSArray *contentsOfPathArray = [fileManager contentsOfDirectoryAtPath:filePath error:nil];      return contentsOfPathArray;  }

Swift:

1 2 3 4 5 6 7 8 9  /** 对指定路径执行浅搜索,读取指定目录路径下的文件、子目录及符号链接的列表(只寻找一层)*/ let jKFilePath = NSHomeDirectory() func jKShallowSearchAllFiles(folderName: NSString) -> NSArray {        let filePath = "\(folderName)"     let contentsOfPathArray = try! fileManager.contentsOfDirectory(atPath: filePath);     return contentsOfPathArray as NSArray     }

2.7、判断文件或文件夹是否存在

OC

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 +(BOOL)jkJudgeFileOrFolderExists:(NSString *)filePathName{      NSFileManager *fileManager = [NSFileManager defaultManager];    NSString *filePath = [NSString stringWithFormat:@"%@",filePathName];    BOOL isDir = NO;    // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录    BOOL existed = [fileManager fileExistsAtPath:filePath isDirectory:&isDir];      if ( !(isDir == YES && existed == YES) ) {           // 不存在的路径         return NO;    }else{          return YES;    }   return nil; }

Swift:

1 2 3 4 5 6 7 8 9 10 11  func jkJudgeFileOrFolderExists(folderName: NSString) -> Bool  {     let filePath = "\(folderName)"     let exist = fileManager.fileExists(atPath: filePath)     // 查看文件夹是否存在,如果存在就直接读取,不存在就直接反空     if (exist) {        return true     }else{       return false     }  }

2.9、创建文件(如:动画乐园.text格式的文本文件)

创建文件(如:动画乐园.text格式的文本文件)

OC

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /**folderNmae:文件的名字*/ - (NSString *)jKCreateFile:(NSString *)folderName{       NSString *filePath = [NSString stringWithFormat:@"%@",folderName];     NSFileManager *fileManager = [NSFileManager defaultManager];     BOOL isDir = NO;     // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录     BOOL existed = [fileManager fileExistsAtPath:filePath isDirectory:&isDir];       if ( !(isDir == YES && existed == YES) ) {              // 不存在的路径才会创建          [fileManager createFileAtPath:filePath contents:nil attributes:nil];      }    return filePath; }

Swift:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19  // fileName:文件的名字(不是文件夹)  // baseFilePath: 文件的基础路径  // content: 存进文件的内容  /** 根据传件来的路径创建文件*/  func jKCreateFile(fileName: NSString,baseFilePath: NSString) -> (filePath: NSString,createStatus: Bool) {        // NSHomeDirectory():应用程序目录    let filePath = "\(baseFilePath)" + "/\(fileName)"    let exist = fileManager.fileExists(atPath: filePath)    // 不存在的文件路径才会创建    if (!exist) {                //withIntermediateDirectories为ture表示路径中间如果有不存在的文件夹都会创建        let createSuccess = fileManager.createFile(atPath: filePath,contents:nil,attributes:nil)        return (filePath as NSString,createSuccess as Bool)             }    return (filePath as NSString,true)  }

2.10、可以通过write(to:)方法,可以创建文件并将对象(文件,音频,图片,视频以及数组,字典)都可以写入文件

简单对象:iOS中提供四种类型可以直接进行文件存取:NSString(字符串)、NSArray(数组)、NSDictionary(字典)、NSData(数据)(以上类型包括子类)

注意:数组(可变与不可变)和字典(可变与不可变)中元素对象的类型,也必须是上述四种,否则不能直接写入文件

2.10.1、把NSSString保存到上面“动画乐园.text”的文件里面

NSSString保存到上面“动画乐园.text”的文件里面

OC

1 2 3 4 5 // 文件的路径(以文件存在为基础,创建文件请看2.9) NSString * path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/动画乐园.text"]; NSString *content = @"动画乐园欢迎你" // 内容写入 [content writeToFile: path atomically:YES encoding:NSUTF8StringEncoding error:nil];

Swift:

1 2 3 let path = NSHomeDirectory() + "/Documents/动画乐园.text" let info = "动画乐园欢迎你" as String try! info.write(toFile: path, atomically: true, encoding: String.Encoding.utf8)

2.10.2、把本地图片或者网络图片保存到上面“图片”的文件夹里面

filePath图片的路径是提前存在的(没有的话看上面的去创建文件夹)

把本地图片或者网络图片保存到上面**“图片”**的文件夹里面

OC

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 // 本地图片的名字 NSString *imageString = @"testimage.png"; UIImage *image = [UIImage imageNamed:imageString]; NSData *data = UIImagePNGRepresentation(image); // 图片的存储文件夹 NSString *customPath = [NSString stringWithFormat:@"%@%@",NSHomeDirectory(),@"/Documents/图片"]; // 图片的存储路径 imagePath = [NSString stringWithFormat:@"%@/%@", customPath, imageString]; [data writeToFile: imagePath atomically:YES]; 网络图片 NSString *imageStr = @"http://images.ciotimes.com/o_1can10mm91sd91c6n1thv15oel8g9.png"; NSString *customPath = [NSString stringWithFormat:@"%@/%@",[JKFilePathOperationExtension jKDocuments],@"jk.png"]; NSData *data = [NSData dataWithContentsOfURL:[NSURL  URLWithString:imageStr]]; //转换为图片保存到以上的沙盒路径中 UIImage * currentImage = [UIImage imageWithData:data]; //其中参数0.5表示压缩比例,1表示不压缩,数值越小压缩比例越大 [UIImageJPEGRepresentation(currentImage, 0.5) writeToFile:customPath  atomically:YES];

Swift:

1 2 3 4 let filePath = NSHomeDirectory() + "/Documents/图片/testimage.png" let image = UIImage(named: "testimage.png") let data:Data = UIImagePNGRepresentation(image!)! try? data.write(to: URL(fileURLWithPath: filePath))

2.10.3、把本数组写到文件里面(array.plist的文件是已经存在的基础上)

把本数组写到文件里面(array.plist的文件是已经存在的基础上)

OC

1 2 3 4 5 // 创建数组 NSArray  *array = @[@"1",@"2",@"3"]; // 文件路径(前提是已经存在),创建文件请看上面2.9 NSString *customPath = [NSString stringWithFormat:@"%@%@",NSHomeDirectory(),@"/Documents/array.plist"]; [array writeToFile:filePath atomically:YES];

Swift

1 2 3 let filePath = NSHomeDirectory() + "/Documents/array.plist" let array = NSArray(objects: "我","❤️","你") array.write(toFile: filePath, atomically: true)

2.10.4、把本字典写到文件里面(dictionary.plist的文件是已经存在的基础上)

把本字典写到文件里面(dictionary.plist的文件是已经存在的基础上)

OC

1 2 3 4 NSString *customPath = [NSString stringWithFormat:@"%@%@",NSHomeDirectory(),@"/Documents/dictionary.plist"]; // 创建字典 NSDictionary *dict = @{@"1":@"9",@"2":@"8",@"3":@"7",@"4":@"6"}; dict.write(toFile: filePath, atomically: true)

Swift

1 2 3 let filePath = NSHomeDirectory() + "/Documents/dictionary.plist" let dictionary = NSDictionary(dictionary: ["name":"JK","age":"26"]) dictionary.write(toFile: filePath, atomically: true)

2.11、复制文件

复制文件

OC

1 2 3 4  NSString *fromPath = [NSString stringWithFormat:@"%@%@",NSHomeDirectory(),@"/Documents/我的笔记.text"];  NSString *toPath = [NSString stringWithFormat:@"%@%@",NSHomeDirectory(),@"/Documents/复制后的笔记.text"];  NSFileManager *fileManager = [NSFileManager defaultManager];  BOOL isCopySuccess = [fileManager copyItemAtPath: fromPath toPath: toPath error:nil];

Swift

1 2 3 4 5  let homeDirectory = NSHomeDirectory()  let fomePath = homeDirectory + "/Documents/我的笔记.text"  let toPath = homeDirectory + "/Documents/复制后的笔记.text"  let fileManager1 = FileManager.default  try! fileManager1.copyItem(atPath: fomePath as String, toPath: toPath as String)

2.12、移动文件或者文件夹

文件夹或者文件,这里是文件夹JKPdf要提前建好,创建方式看上面

移动文件或者文件夹

OC

1 2 3 4 NSString *fromPath = [NSString stringWithFormat:@"%@%@",NSHomeDirectory(),@"/Documents/JKPdf"]; NSString *toPath = [NSString stringWithFormat:@"%@%@",NSHomeDirectory(),@"/tmp/JKPdf"]; NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL isMoveSuccess = [fileManager moveItemAtPath:fromPath toPath:toPath error:nil];

Swift

1 2 3 4 let fomePath =NSHomeDirectory()  + "/Documents/JKPdf" let toPath =  NSHomeDirectory()  + "/tmp/JKPdf" let fileManagerMove = FileManager.default try! fileManagerMove.moveItem(atPath: fromUrl as String, toPath: toUrl as String)

2.13、读取文件

2.13.1、文件的类型为文本,如 我的笔记.text

OC

1 2 3 4  // 拿到我的笔记.text的路径  NSString *customPath = @"路径";  // 取出文本的内容  NSString *str = [NSString stringWithContentsOfFile:customPath encoding:NSUTF8StringEncoding error:nil];

Swift

1 2 3 4 5  let path = NSHomeDirectory() + "/Documents/我的笔记.text"  let readHandler =  FileHandle(forReadingAtPath: path)  let data = readHandler?.readDataToEndOfFile()  let readString = String(data: data!, encoding: String.Encoding.utf8)  print("文件内容: \(String(describing: readString))")

2.13.2、读取沙盒图片

模仿SDWebImage: 加载图片前先去沙盒寻找,如果有就加载沙盒里的图片,没有的话就加载网络的图片

OC

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 /** 读出图片 imageUrl: 图片的链接*/ +(void)jKReadImageWithImageUrl:(NSString *)imageUrl withReadImage:(ReadImage)readImage{      NSString *catchsImageStr = [imageUrl lastPathComponent];    NSFileManager *fileManager = [NSFileManager defaultManager];    NSString *filePath = [NSString stringWithFormat:@"%@/Library/Caches/JKImage/%@",NSHomeDirectory(),catchsImageStr];      // fileExistsAtPath 判断一个文件或目录是否有效    BOOL existed = [fileManager fileExistsAtPath:filePath];      if ( !(existed == YES) ) {       // 图片不存在沙盒里,检查文件夹是否存在        NSString *folderPath = [NSString stringWithFormat:@"%@/Library/Caches/JKImage",NSHomeDirectory()];       BOOL isDir = NO;       // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录       BOOL existedFolder = [fileManager fileExistsAtPath:folderPath isDirectory:&isDir];       if ( !(isDir == YES && existedFolder == YES) ) {             // 不存在的文件夹JKImage才会创建           [fileManager createDirectoryAtPath:folderPath withIntermediateDirectories:YES attributes:nil error:nil];       }        // 文件夹存在就把图片缓存进去      // 图片不存在      NSData *data = [NSData dataWithContentsOfURL:[NSURL  URLWithString:imageUrl]];      //转换为图片保存到以上的沙盒路径中      UIImage * currentImage = [UIImage imageWithData:data];      //其中参数0.5表示压缩比例,1表示不压缩,数值越小压缩比例越大      [UIImageJPEGRepresentation(currentImage, 0.5) writeToFile:[NSString stringWithFormat:@"%@/%@",folderPath,catchsImageStr] atomically:YES];      readImage(currentImage,YES);      }else{         // 图片在沙盒里直接取出       NSData *data = [NSData dataWithContentsOfFile:filePath];       UIImage *image = [UIImage imageWithData:data];       readImage(image,YES);    }  }

Swift

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  let path = NSHomeDirectory() + "/Documents/2.png"  let fileManagerReadImage = FileManager.default  let exist = fileManagerReadImage.fileExists(atPath: path)  // 不存在直接返回false  if (!exist) {           print("存在图片")  }else{          let readHandler =  FileHandle(forReadingAtPath: path)     let data = (readHandler?.readDataToEndOfFile())!     let image = UIImage(data: data)         print("不存在图片")  }

2.14、获取文件属性(创建时间,修改时间,文件大小,文件类型等信息)

OC

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 let docPath = NSHomeDirectory() + "/Documents/我的笔记.text" NSFileManager *fileManager = [NSFileManager defaultManager]; NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path error:nil];   if (fileAttributes != nil) {    NSNumber *fileSize;    NSString *fileOwner, *creationDate;    NSDate *fileModDate;    //NSString *NSFileCreationDate    //文件大小    if ((fileSize = [fileAttributes objectForKey:NSFileSize])) {            NSLog(@"文件的大小= %qi\n", [fileSize unsignedLongLongValue]);    }    //文件创建日期    if ((creationDate = [fileAttributes objectForKey:NSFileCreationDate])) {            NSLog(@"文件创建的日期: %@\n", creationDate);    }    //文件所有者    if ((fileOwner = [fileAttributes objectForKey:NSFileOwnerAccountName])) {           NSLog(@"Owner: %@\n", fileOwner);     }     //文件修改日期     if ((fileModDate = [fileAttributes objectForKey:NSFileModificationDate])) {             NSLog(@"文件修改的日期: %@\n", fileModDate);     } }else {      NSLog(@"该文件不存在"); }

Swift

1 2 3 4 5 6 7 // 我的笔记.text文本是存在Documents下面的 let path = NSHomeDirectory() + "/Documents/我的笔记.text" let managerGetFile = FileManager.default let attributes = try? managerGetFile.attributesOfItem(atPath: path) //结果为Dictionary类型 print("创建时间:\(attributes[FileAttributeKey.creationDate]!)") print("修改时间:\(attributes[FileAttributeKey.modificationDate]!)") print("文件大小:\(attributes[FileAttributeKey.size]!)")

2.15、计算单个或多个文件夹的大小(清理数据常用)

OC

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 /** 计算文件夹的大小 folderPath: 文件夹的大小*/ -(NSString *)jKCalculateTheSizeOfTheFolderPath:(NSString *)folderPath{      NSFileManager *fileManager = [NSFileManager defaultManager];    BOOL isExist = [fileManager fileExistsAtPath:folderPath];    if (isExist) {          unsigned long long folderSize = 0;        NSArray *childerFiles=[fileManager subpathsAtPath:folderPath];          if (childerFiles.count != 0) {                  for (NSString *fileName in childerFiles) {                         NSString *fileAbsolutePath=[folderPath stringByAppendingPathComponent:fileName];                folderSize +=[self jKCalculateTheSizeOfTheFilePath:fileAbsolutePath];             }        }else{                  folderSize = [self jKCalculateTheSizeOfTheFilePath:folderPath];        }         NSString *sizeString;         if (folderSize >= 1024.0 * 1024.0) {                sizeString = [NSString stringWithFormat:@"%.2fMB",folderSize / (1024.0 * 1024.0)];       }else if (folderSize >= 1024.0){                sizeString = [NSString stringWithFormat:@"%.fkb",folderSize / (1024.0)];       }else{                sizeString = [NSString stringWithFormat:@"%llub",folderSize];       }         // unsigned long long       return sizeString;      } else {         NSLog(@"file is not exist");       return @"0MB";    } }   /** 计算文件的大小*/ -(unsigned long long)jKCalculateTheSizeOfTheFilePath:(NSString *)filePath{       NSFileManager *fileManager = [NSFileManager defaultManager];     BOOL isExist = [fileManager fileExistsAtPath:filePath];     if (isExist) {         unsigned long long fileSize = [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];         return fileSize;     } else {         NSLog(@"file is not exist");         return 0;     } }

Swift

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 /** 计算文件夹或者文件的大小 */ class func getSize(folderPath: String)-> String {   if folderPath.count == 0 {       return "0MB" as String   }   let manager = FileManager.default   if !manager.fileExists(atPath: folderPath){       return "0MB" as String   }   var fileSize:Float = 0.0   do {         let files = try manager.contentsOfDirectory(atPath: folderPath)                 for file in files {                       let path = folderPath + "/\(file)"           fileSize = fileSize + fileSizeAtPath(filePath: path)                     }       }catch{                      fileSize = fileSize + fileSizeAtPath(filePath: folderPath)   }       print("大小==\(fileSize)")       var resultSize = ""       if fileSize >= 1024.0*1024.0{               resultSize = NSString(format: "%.2fMB", fileSize/(1024.0 * 1024.0)) as String     }else if fileSize >= 1024.0{               resultSize = NSString(format: "%.fkb", fileSize/(1024.0 )) as String           }else{               resultSize = NSString(format: "%llub", fileSize) as String   }     return resultSize }   /**  计算单个文件或文件夹的大小 */ class func fileSizeAtPath(filePath:String) -> Float {       let manager = FileManager.default   var fileSize:Float = 0.0   if manager.fileExists(atPath: filePath) {       do {           let attributes = try manager.attributesOfItem(atPath: filePath)                        if attributes.count != 0 {                               fileSize = attributes[FileAttributeKey.size]! as! Float             }          }catch{                  }     }        return fileSize; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有