iOS文件处理类

这是一个用来简化iOS中关于文件操作的一个类,所有方法都为类方法.

Source

File.h

//
// File.h
// FileManager
//
// http://home.cnblogs.com/u/YouXianMing/
//
// Copyright (c) 2014年 YouXianMing All rights reserved.
// #import <Foundation/Foundation.h> #define FILE_PATH(filePath) [File path:(filePath)]
#define ROOT_PATH [File rootPath]
#define BUNDLE_PATH(fileName) [File bundleSource:(fileName)]
#define CREATE_FOLDER(folderPath) [File createFolder:(folderPath)]
#define FILE_EXIST(filePath) [File exist:(filePath)]
#define IS_DIRECTORY(filePath) [File isDirectory:(filePath)]
#define IS_FILE(filePath) ![File isDirectory:(filePath)]
#define FILE_INFO(filePath) [File fileInfo:(filePath)]
#define FILE_SIZE(filePath) [File fileSize:(filePath)]
#define FILE_DICTIONARY(filePath) [File dictionaryFrom:(filePath)]
#define FILE_ARRAY(filePath) [File arrayFrom:(filePath)] @interface File : NSObject /*
注意:凡是参数为 filePath folderPath 的全部为相对路径,用以下字符串拼接使用 /Documents
/Library/Caches
/Library/Preferences
/tmp 其他都为绝对路径
*/ + (NSString *)rootPath;
+ (NSString *)bundleSource:(NSString *)fileName;
+ (NSString *)path:(NSString *)filePath;
+ (BOOL)createFolder:(NSString *)filePath;
+ (BOOL)exist:(NSString *)filePath;
+ (BOOL)isDirectory:(NSString *)filePath;
+ (NSDictionary *)fileInfo:(NSString *)filePath;
+ (int)fileSize:(NSString *)filePath;
+ (NSArray *)enumeratorFolder:(NSString *)folderPath;
+ (void)enumeratorFolder:(NSString *)folderPath each:(void (^)(NSString *path))each; + (BOOL)copyFrom:(NSString *)sourcePath to:(NSString *)targetPath;
+ (BOOL)moveFrom:(NSString *)sourcePath to:(NSString *)targetPath;
+ (BOOL)remove:(NSString *)targetPath; + (BOOL)writePlist:(id)plist to:(NSString *)filePath;
+ (NSMutableDictionary *)dictionaryFrom:(NSString *)filePath;
+ (NSMutableArray *)arrayFrom:(NSString *)filePath;
+ (void)path:(NSString *)filePath dictionary:(void (^)(NSMutableDictionary *dictionary))dictionary;
+ (void)path:(NSString *)filePath array:(void (^)(NSMutableArray *array))array; @end

File.m

//
// File.m
// FileManager
//
// http://home.cnblogs.com/u/YouXianMing/
//
// Copyright (c) 2014年 YouXianMing All rights reserved.
// #import "File.h" static NSString *_sandBoxPath = nil; @implementation File + (void)initialize
{
if (self == [File class])
{
_sandBoxPath = NSHomeDirectory();
}
} + (NSString *)rootPath
{
return _sandBoxPath;
} + (NSString *)path:(NSString *)filePath
{
return [_sandBoxPath stringByAppendingPathComponent:filePath];
} + (BOOL)createFolder:(NSString *)filePath
{
return [[NSFileManager defaultManager] createDirectoryAtPath:[self path:filePath]
withIntermediateDirectories:YES
attributes:nil
error:nil];
} + (NSString *)bundleSource:(NSString *)fileName
{
return [[NSBundle mainBundle] pathForResource:fileName
ofType:nil];
} + (BOOL)exist:(NSString *)filePath
{
return [[NSFileManager defaultManager] fileExistsAtPath:[self path:filePath]
isDirectory:NO];
} + (BOOL)isDirectory:(NSString *)filePath
{
BOOL isDirectory = NO; [[NSFileManager defaultManager] fileExistsAtPath:[self path:filePath]
isDirectory:&isDirectory]; return isDirectory;
} + (BOOL)copyFrom:(NSString *)sourcePath to:(NSString *)targetPath
{
return [[NSFileManager defaultManager] copyItemAtPath:sourcePath
toPath:targetPath
error:nil];
} + (BOOL)moveFrom:(NSString *)sourcePath to:(NSString *)targetPath
{
return [[NSFileManager defaultManager] moveItemAtPath:sourcePath
toPath:targetPath
error:nil];
} + (BOOL)remove:(NSString *)targetPath
{
return [[NSFileManager defaultManager] removeItemAtPath:targetPath
error:nil];
} + (NSArray *)enumeratorFolder:(NSString *)folderPath
{
if ([self isDirectory:folderPath])
{
NSMutableArray *storeArray = [NSMutableArray array]; NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:folderPath];
NSFileManager *localFileManager = [[NSFileManager alloc] init];
NSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:docsDir]; NSString *file;
while ((file = [dirEnum nextObject]))
{
[storeArray addObject:[folderPath stringByAppendingPathComponent:file]];
} return storeArray;
}
else
{
return nil;
}
} + (void)enumeratorFolder:(NSString *)folderPath each:(void (^)(NSString *path))each
{
if ([self isDirectory:folderPath])
{
NSMutableArray *storeArray = [NSMutableArray array]; NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:folderPath];
NSFileManager *localFileManager = [[NSFileManager alloc] init];
NSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:docsDir]; NSString *file;
while ((file = [dirEnum nextObject]))
{
[storeArray addObject:[folderPath stringByAppendingPathComponent:file]];
} [storeArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
each(obj);
}];
}
} + (NSDictionary *)fileInfo:(NSString *)filePath
{
return [[NSFileManager defaultManager] attributesOfItemAtPath:[self path:filePath]
error:nil];
} + (int)fileSize:(NSString *)filePath
{
return [[[[NSFileManager defaultManager] attributesOfItemAtPath:[self path:filePath]
error:nil] \
objectForKey:@"NSFileSize"] intValue];
} + (BOOL)writePlist:(id)plist to:(NSString *)filePath
{
if ([plist isKindOfClass:[NSDictionary class]])
{
NSDictionary *point = plist; return [point writeToFile:[self path:filePath]
atomically:YES];
}
else if ([plist isKindOfClass:[NSArray class]])
{
NSArray *point = plist; return [point writeToFile:[self path:filePath]
atomically:YES];
}
else
{
return NO;
}
} + (NSMutableDictionary *)dictionaryFrom:(NSString *)filePath
{
NSMutableDictionary *dictionary = \
[[NSMutableDictionary alloc] initWithContentsOfFile:[self path:filePath]]; return dictionary;
} + (NSMutableArray *)arrayFrom:(NSString *)filePath
{
NSMutableArray *array = \
[[NSMutableArray alloc] initWithContentsOfFile:[self path:filePath]]; return array;
} + (void)path:(NSString *)filePath dictionary:(void (^)(NSMutableDictionary *dictionary))dictionary
{
NSMutableDictionary *sourceDictionary = \
[[NSMutableDictionary alloc] initWithContentsOfFile:[self path:filePath]]; dictionary(sourceDictionary); [sourceDictionary writeToFile:[self path:filePath]
atomically:YES];
} + (void)path:(NSString *)filePath array:(void (^)(NSMutableArray *array))array
{
NSMutableArray *sourceArray = \
[[NSMutableArray alloc] initWithContentsOfFile:[self path:filePath]]; array(sourceArray); [sourceArray writeToFile:[self path:filePath]
atomically:YES];
} @end

Usage

获取沙盒中Documents目录下的一个文本文件YouXianMing.txt

判断这个沙盒中Documents目录下的一个文本文件YouXianMing.txt是否存在

判断沙盒中Documents目录下的一个文本文件YouXianMing.txt是否为一个文件

沙盒中Documents目录下的一个文本文件YouXianMing.txt的大小

读取/Library/Preferences目录下的一个字典类型的plist文件YouXianMing.plist

在沙盒根目录下创建文件夹层级结构/A/B/C

将根目录下的A文件夹以及子文件夹拷贝到Documents下的A文件夹当中

将集合(数组或者字典)写到/Library/Preferences下的tmp.plist当中

读取/Library/Preferences目录下的tmp.plist,修改其中的一个值并保存

没举例子的自己试一下就知道了.

so easy :) enjoy it.

iOS文件处理类的更多相关文章

  1. C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

    迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器 ...

  2. IOS文件操作的两种方式:NSFileManager操作和流操作

    1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...

  3. C++的IO处理中的头文件以及类理解(2)<sstream>头文件

    C++的IO处理中的头文件以及类理解(2)<sstream>头文件 头文件<sstream>中定义的类型都继承iostream头文件中定义的类型.除了继承得来的操作,sstre ...

  4. IOS上传图片方法类

    IOS上传图片方法类   iPhone开发中遇到上传图片问题,找到多资料,最终封装了一个类,请大家指点,代码如下 // // RequestPostUploadHelper.h // demodes ...

  5. IOS 文件夹结构

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/MyGameZone/article/details/24494765 IOS文件夹结构 说明 这些仅 ...

  6. php 文件日志类

    php文件日志类,按年月日组织目录结构. <?php class FileLog { private $_filepath; //文件路径 private $_filename; //日志文件名 ...

  7. C++文件流类与文件流对象

    文件流是以外存文件为输入输出对象的数据流.输出文件流是从内存流向外存文件的数据,输入文件流是从外存文件流向内存的数据.每一个文件流都有一个内存缓冲区与之对应. 请区分文件流与文件的概念,不用误以为文件 ...

  8. 使用Java的多线程和IO流写一个文件复制功能类

    创建一个复制功能类,继承Thread类,重写run()方法,把FileInputStream和FileOutputStream输入输出流写在run()方法内.示例代码如下: import java.i ...

  9. Code片段 : .properties属性文件操作工具类 & JSON工具类

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 j ...

随机推荐

  1. oracle 处理锁表sql

    declare --类型定义 cursor c_cur is --查询锁表进程 SELECT object_name, machine, s.sid, s.serial# FROM gv$locked ...

  2. SQL Server触发器创建、删除、修改、查看

    一:触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约束. 二:SQL Server为每个触发器都创 ...

  3. 理解session和cookie

    Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们有各自的优点,也有各自的缺陷,然而具有讽刺意味的是它们的优点和它们的使用场景又是矛盾的.例如,使用 Cookie ...

  4. 查看分析器(Analyzer)的分词效果

    1 测试代码 package com.test.lucene.helloworld; import org.apache.lucene.analysis.Analyzer; import org.ap ...

  5. html中超链接的target属性

    <a> 标签的 target 属性规定在何处打开链接文档.(target就是目标的意思) 一共有(4+1种选择): 用法:<a target="value"> ...

  6. Python对列表中字典元素排序

    问题起源 json对象a,b a = '{"ROAD": [{"id": 123}, {"name": "no1"}]} ...

  7. java并发编程(2)线程池的使用

    一.任务和执行策略之间的隐性耦合 Executor可以将任务的提交和任务的执行策略解耦 只有任务是同类型的且执行时间差别不大,才能发挥最大性能,否则,如将一些耗时长的任务和耗时短的任务放在一个线程池, ...

  8. 开发常用的 JavaScript 知识点总结

    No1.语法和类型 1.声明定义 变量类型:var,定义变量:let,定义块域(scope)本地变量:const,定义只读常量.变量格式:以字母.下划线“_”或者$符号开头,大小写敏感.变量赋值:声明 ...

  9. ServiceHelper

    public class ServiceHelper { private static string _baseUrl = $@"http://{Config.Instance.MesSer ...

  10. 在WPF中自定义控件

    一, 不一定需要自定义控件在使用WPF以前,动辄使用自定义控件几乎成了惯性思维,比如需要一个带图片的按钮,但在WPF中此类任务却不需要如此大费周章,因为控件可以嵌套使用以及可以为控件外观打造一套新的样 ...