基于NSString处理文件的高级类

我已经把处理文件的类简化到了变态的程度,如果你还有更简洁的方法,请告知我,谢谢!

使用详情:

源码:

//
//  NSString+File.h
//  MasterCode
//
//  Created by YouXianMing on 14/11/28.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface NSString (File)

/**
 *  沙盒文件路径
 *
 *  /Documents
 *  /Library/Caches
 *  /Library/Preferences
 *  /tmp
 *
 *  @return 沙盒文件路径
 */
- (NSString *)path;

/**
 *  bundel文件路径
 *
 *  @return bundel文件路径
 */
- (NSString *)bundleFile;

/**
 *  bundle图片
 *
 *  @return bundle图片
 */
- (UIImage *)bundleImage;

/**
 *  检测文件或者文件夹是否存在
 *
 *  @return YES 存在, NO 不出在
 */
- (BOOL)exist;

/**
 *  创建文件夹
 *
 *  @return YES 成功, NO 失败
 */
- (BOOL)createFolder;

/**
 *  是否是文件夹
 *
 *  @return YES 是, NO 不是
 */
- (BOOL)isDirectory;

/**
 *  复制到这个路径
 *
 *  @param path 目的路径
 *
 *  @return YES 成功, NO 失败
 */
- (BOOL)copyTo:(NSString *)path;

/**
 *  移动到这个路径
 *
 *  @param path 目的路径
 *
 *  @return YES 成功, NO 失败
 */
- (BOOL)moveTo:(NSString *)path;

/**
 *  删除文件
 *
 *  @return YES 成功, NO 失败
 */
- (BOOL)remove;

/**
 *  遍历出文件夹中的文件
 *
 *  @return 所有文件夹路径
 */
- (NSArray *)enumeratorFolder;

/**
 *  遍历出文件夹并在block中查看
 *
 *  @param block 可以查看path
 */
- (void)enumeratorFolderEach:(void (^)(NSString *path))block;

/**
 *  文件信息
 *
 *  @return 文件信息
 */
- (NSDictionary *)fileInfo;

/**
 *  文件大小
 *
 *  @return 文件大小
 */
- (int)fileSize;

@end
//
//  NSString+File.m
//  MasterCode
//
//  Created by YouXianMing on 14/11/28.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "NSString+File.h"

@implementation NSString (File)

- (NSString *)path {
    return [NSHomeDirectory() stringByAppendingPathComponent:self];
}

- (NSString *)bundleFile {
    return [[NSBundle mainBundle] pathForResource:self
                                           ofType:nil];
}

- (UIImage *)bundleImage {
    return [UIImage imageNamed:self];
}

- (BOOL)exist {
    return [[NSFileManager defaultManager] fileExistsAtPath:[NSHomeDirectory() stringByAppendingPathComponent:self]
                                                isDirectory:nil];
}

- (BOOL)createFolder {
    return [[NSFileManager defaultManager] createDirectoryAtPath:[NSHomeDirectory() stringByAppendingPathComponent:self]
                                     withIntermediateDirectories:YES
                                                      attributes:nil
                                                           error:nil];
}

- (BOOL)isDirectory {
    BOOL isDirectory = NO;

    [[NSFileManager defaultManager] fileExistsAtPath:[NSHomeDirectory() stringByAppendingPathComponent:self]
                                         isDirectory:&isDirectory];

    return isDirectory;
}

- (BOOL)copyTo:(NSString *)path {
    return [[NSFileManager defaultManager] copyItemAtPath:[NSHomeDirectory() stringByAppendingPathComponent:self]
                                                   toPath:[NSHomeDirectory() stringByAppendingPathComponent:path]
                                                    error:nil];
}

- (BOOL)moveTo:(NSString *)path {
    return [[NSFileManager defaultManager] moveItemAtPath:[NSHomeDirectory() stringByAppendingPathComponent:self]
                                                   toPath:[NSHomeDirectory() stringByAppendingPathComponent:path]
                                                    error:nil];
}

- (BOOL)remove {
    return [[NSFileManager defaultManager] removeItemAtPath:[NSHomeDirectory() stringByAppendingPathComponent:self]
                                                      error:nil];
}

- (NSArray *)enumeratorFolder {
    if ([self isDirectory])
    {
        NSMutableArray *storeArray = [NSMutableArray array];

        NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:self];
        NSFileManager *localFileManager = [[NSFileManager alloc] init];
        NSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:docsDir];

        NSString *file;
        while ((file = [dirEnum nextObject]))
        {
            [storeArray addObject:[[NSHomeDirectory() stringByAppendingPathComponent:self] stringByAppendingPathComponent:file]];
        }

        return storeArray;
    }
    else
    {
        return nil;
    }
}

- (void)enumeratorFolderEach:(void (^)(NSString *path))block {
    if ([self isDirectory])
    {
        NSMutableArray *storeArray = [NSMutableArray array];

        NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:self];
        NSFileManager *localFileManager = [[NSFileManager alloc] init];
        NSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:docsDir];

        NSString *file;
        while ((file = [dirEnum nextObject]))
        {
            [storeArray addObject:[self stringByAppendingPathComponent:file]];
        }

        [storeArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            block(obj);
        }];
    }
}

- (NSDictionary *)fileInfo {
    return [[NSFileManager defaultManager] attributesOfItemAtPath:[NSHomeDirectory() stringByAppendingPathComponent:self]
                                                            error:nil];
}

- (int)fileSize {
    return [[[[NSFileManager defaultManager] attributesOfItemAtPath:[NSHomeDirectory() stringByAppendingPathComponent:self]
                                                              error:nil]              objectForKey:@"NSFileSize"] intValue];
}

@end
时间: 2024-08-08 05:38:46

基于NSString处理文件的高级类的相关文章

Volley随笔之文件缓存DiskBasedCache类

Volley提供了一个基于文件的缓存类DiskBasedCache保存缓存数据.这个类完成缓存工作的原理大致如此,首先声明一个文件夹,文件夹下的文件与cacheKey一一对应,也就是说每一个文件时不同网络请求的返回数据.文件的格式是这样,文件头是数据结构CacheHeader,描述了缓存的信息,之后就是缓存数据. 下面是DiskBasedCache的代码,不得不说很优美! /*  * Copyright (C) 2011 The Android Open Source Project * * L

hibernate 的映射文件快速生成:使用CodeSmith快速生成映射文件和映射类

一 CodeSmith简介 本文以表自动生成NHibernate的映射文件和映射类的实例来说明一下本软件的使用方法. CodeSmith是一种基于模板的代码生成工具,其使用类似于ASP.NET的语法来生成任意类型的代码和文件.使用 CodeSmith,可以生成包括简单的强类型集合和完整应用程序在内的任何东西.(弱类型-没有明显的类型,会随着环境的不同自动变换类型:强类型-在声明时规定其数据类型,保证类的安全,虽然系统也有一定的默认转换,但是没有弱类型那么随便) 当您生成应用程序时,您经常需要重复

iOS开发拓展篇—封装音频文件播放工具类

一.简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法 加载音乐文件 - (id)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError; - (id)initWithData:(NSData *)data error:(NSError **)outError; 准备播放(缓冲,提高播放的流畅性) - (BOOL)prepareToPlay;

《Nodejs开发加密货币》之二十六:轻松从Js文件生成UML类图

前言 上一篇<函数式编程入门经典>,罗嗦了很长,很多小伙伴看得云里雾里.这里提供一个实例,让大家切身感受函数式编程的奥妙和趣味.当然,仅仅为了举例而写代码就没有什么意义了,本书提供的例子都是承担了某项任务的具体项目或工具,这个例子自然也不能例外. 本书用到了大量的Uml类图,经常有小伙伴问我用什么工具画的.说实话,前几篇是我个人一点点手工整理的,但后来就感觉在浪费生命,作为程序员,怎么可能容忍这样的事情反复发生.所以,就有了 js2uml(见参考)这个小工具.只不过,当初目的单一,仅仅使用正则

Android开发之网络请求通信专题(二):基于HttpClient的文件上传下载

上一篇专题Android开发之网络请求通信专题(一):基于HttpURLConnection的请求通信我们讲解了如何使用httpurlconnection来实现基本的文本数据传输.一般在实际开发中我们可以用于传输xml或者json格式的数据.今天我们来讲解另外一种http网络请求的方式:httpclient,并实现文件的上传和下载. 在这里插个题外话,其实这些网络请求有很多第三方jar包可以使用,这些包都封装得很好了.如果只是想使用,我们就直接拿别人得jar包来用就好.博主这里推荐一个叫xuti

封装读取文件路径的类File.h+File.m

1 #import <Foundation/Foundation.h> 2 3 #define FILE_PATH(filePath) [File path:(filePath)] 4 #define ROOT_PATH [File rootPath] 5 #define BUNDLE_PATH(fileName) [File bundleSource:(fileName)] 6 #define CREATE_FOLDER(folderPath) [File createFolder:(fol

ORM利器:NHibernate(二)使用CodeSmith快速生成映射文件和映射类

    在上一篇文章<ORM利器:NHibernate(一)简介>,我们对NHibernate做了简要介绍,接下来的系列文章将以Demo的形式和大家分享使用NHibernate的初步使用. 一 CodeSmith简介 本文以表自动生成NHibernate的映射文件和映射类的实例来说明一下本软件的使用方法.     CodeSmith是一种基于模板的代码生成工具,其使用类似于ASP.NET的语法来生成任意类型的代码和文件.使用 CodeSmith,可以生成包括简单的强类型集合和完整应用程序在内的

使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form

使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form 开发环境: Wing IDE 6.1 步骤1: 打开 Wing IDE,创建一个新的 project,保存这个 project 到某个路径下,把之前生产的 py 文件所在的文件夹添加到该 project 中,然后在文件夹下新建一个 py 文件,我这里命名为 PySideTest.py 图中 PySide2ToPySide.py 是一个 PySide2 兼容 PySide 的一个补丁代码,

scrapy的大文件下载(基于一种形式的管道类实现)

scrapy的大文件下载(基于一种形式的管道类实现) 爬虫类中将解析到的图片地址存储到item,将item提交给指定的管道 在管道文件中导包:from scrapy.pipelines.images import ImagesPipeline 基于ImagesPipeline父类,自定义一个管道类 重写管道类中的如下三个方法: from scrapy.pipelines.images import ImagesPipeline import scrapy class ImgporPipeline