• ObjectiveC 文件操作二


    10,文件委托,以便操作文件。头部看起来像是这样。

    @interface MyFileManager : NSObject

    @property(strong)NSFileManager *fileManager;

    @end

    .m文件

    #import "MyFileManager.h"

    @implementation MyFileManager

    @synthesize fileManager;

    @end

    可以在头部引入接口。

    #import <Foundation/Foundation.h>

    @interface MyFileManager : NSObject<NSFileManagerDelegate>

    @property(strong)NSFileManager *fileManager;

    @end

    MyFileManager里面的可选方法。是否能复制

    - (BOOL)fileManager:(NSFileManager *)fileManager shouldCopyItemAtPath:(NSString *)srcPath  toPath:(NSString *)dstPath{

        if([dstPath hasPrefix:@"/Users/Shared/Book/Protected"]){

            NSLog(@"We cannot copy files into the protected folder and so this file was not copied");

            return NO;

        }

        else{

            NSLog(@"We just copied a file successfully");

            return YES;

        }

     

    }

    重写初始化方法

     

    - (id)init {

        self = [super init];

        if (self) {

            self.fileManager = [[NSFileManager alloc] init];

            self.fileManager.delegate = self;

        }

        return self;

    }

    在main.m里面使用刚刚创建的类。

    #import <Foundation/Foundation.h>

    #import "MyFileManager.h"

     

    int main (int argc, const char * argv[])

    {

        

        @autoreleasepool {

            MyFileManager *myFileManager = [[MyFileManager alloc] init];

            

            NSString *protectedDirectory = @"/Users/Shared/Book/Protected";

            

            NSString *cacheDirectory = @"/Users/Shared/Book/Cache";

            

            NSString *fileSource = @"/Users/Shared/Book/textfile.txt";

            

            NSString *fileDestination1 = @"/Users/Shared/Book/Protected/textfile.txt";

            

            NSString *fileDestination2 = @"/Users/Shared/Book/Cache/textfile.txt";

            

            NSError *error = nil;

            

            NSArray *listOfFiles;

            

            NSLog(@"Look at directories BEFORE attempting to copy");

            

            listOfFiles = [myFileManager.fileManager contentsOfDirectoryAtPath:protectedDirectory

                                                                         error:&error];

            

            NSLog(@"List of files in protected directory (before):%@", listOfFiles);

            

            listOfFiles = [myFileManager.fileManager contentsOfDirectoryAtPath:cacheDirectory

                                                                         error:&error];

            

            NSLog(@"List of files in cache directory (before):%@", listOfFiles);

            

            

            //Attempt to copy into protected folder:

            BOOL fileCopied1 = [myFileManager.fileManager copyItemAtPath:fileSource

                                                                  toPath:fileDestination1

                                                                   error:&error];

            

            if(error)

                NSLog(@"There was an error, %@.  fileCopied1 = %i", error, fileCopied1);

            

            //Attempt to copy into cache folder:

            BOOL fileCopied2 =  [myFileManager.fileManager copyItemAtPath:fileSource

                                                                   toPath:fileDestination2

                                                                    error:&error];

            

            if(error)

                NSLog(@"There was an error, %@.  fileCopied2 = %i", error, fileCopied2);

            

            NSLog(@"Look at directories AFTER attempting to copy");

            

            listOfFiles = [myFileManager.fileManager contentsOfDirectoryAtPath:protectedDirectory

                                                                         error:&error];

            

            NSLog(@"List of files in protected directory (after):%@", listOfFiles);

            

            listOfFiles = [myFileManager.fileManager contentsOfDirectoryAtPath:cacheDirectory

                                                                         error:&error];

            

            NSLog(@"List of files in cache directory (after):%@", listOfFiles);

            

            

        }

        return 0;

    }

     

    此例子简单说明了委托方法的应用。

    11,

    使用文件或其他来源的数据。

    组合字符串并写入文件。

    NSUInteger length = 3;

    char bytes1[length];

    bytes1[0] = 'A';

    bytes1[1] = 'B';

    bytes1[2] = 'C';

    char bytes2[length];

    bytes2[0] = 'D';

    bytes2[1] = 'E';

    bytes2[2] = 'F’;

    声明可变数组。

    NSMutableData *mutableData = [[NSMutableData alloc] init];

    可变数组有很多方法,具体参考手册。

    下面是代码。

    NSUInteger length = 3;

            

            char bytes1[length];

            bytes1[0] = 'A';

            bytes1[1] = 'B';

            bytes1[2] = 'C';

            

            for (int i=0;i<sizeof(bytes1);i++)

                NSLog(@"bytes1[%i] = %c", i, bytes1[i]);

            

            char bytes2[length];

            bytes2[0] = 'D';

            bytes2[1] = 'E';

            bytes2[2] = 'F';

            

            for (int i=0;i<sizeof(bytes2);i++)

                NSLog(@"bytes2[%i] = %c", i, bytes2[i]);

            

            NSMutableData *mutableData = [[NSMutableData alloc] init];

            

            [mutableData appendBytes:bytes1

                              length:length];

            

            [mutableData appendBytes:bytes2

                              length:length];

            

            NSLog(@"mutableData = %@", mutableData);

            

            char *bytesFromData = (char *)[mutableData bytes];

            

            for (int i=0;i<length*2;i++)

                NSLog(@"bytesFromData[%i] = %c", i, bytesFromData[i]);

            

            NSError *error = nil;

            

            BOOL dataSaved = [mutableData writeToFile:@"/Users/Shared/Book/datadump.txt"

                                              options:NSDataWritingAtomic

                                                error:&error];

            

            if(dataSaved)

                NSLog(@"mutableData successfully wrote contents to file system");

            else

     

                NSLog(@"mutableData was unsuccesful in writing out data because of %@", error);

    12,NSCache缓存数据。

    比如创建一个ViewController类。

    .h文件里面

    #import <UIKit/UIKit.h>

    @interface ViewController : UIViewController

    @property (strong) NSCache *cache;

    @property (assign) BOOL regularLogo;

    @property (strong) UIImageView *myImageView;

    @property (strong) UIButton *loadImageButton;

    - (void)presentImage;

    @end

    .m文件里面

    #import "ViewController.h"

    @implementation ViewController

    -(void)viewDidLoad{

        [super viewDidLoad];

        //set up the cache

        self.cache = [[NSCache alloc] init];

    } @end

    只要试图被激活就可以使用缓存。

    下面是具体代码。

    Listing 4-14. AppDelegate.h #import <UIKit/UIKit.h>

    @class ViewController;

    @interface AppDelegate : UIResponder <UIApplicationDelegate>

    @property (strong, nonatomic) UIWindow *window;

    @property (strong, nonatomic) ViewController *viewController;

    @end

    Listing 4-15. AppDelegate.m #import "AppDelegate.h"

    #import "ViewController.h"

    @implementation AppDelegate

    @synthesize window = _window;

    @synthesize viewController = _viewController;

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        // Override point for customization after application launch.

        self.viewController = [[ViewController alloc]

    initWithNibName:@"ViewController" bundle:nil];

        self.window.rootViewController = self.viewController;

        [self.window makeKeyAndVisible];

        return YES;

    } @end

    Listing 4-16. ViewController.h #import <UIKit/UIKit.h>

    @interface ViewController : UIViewController

    @property (strong) NSCache *cache;

    @property (assign) BOOL regularLogo;

    @property (strong) UIImageView *myImageView;

    @property (strong) UIButton *loadImageButton;

    - (void)presentImage;

    @end

    Listing 4-17. ViewController.m #import "ViewController.h"

    @implementation ViewController

    @synthesize cache, regularLogo, myImageView, loadImageButton;

    -(void)viewDidLoad{

        [super viewDidLoad];

        //Change the view's background color to white

        self.view.backgroundColor = [UIColor whiteColor];

        //Load the regular logo first

        self.regularLogo = YES;

     //set up the cache

        self.cache = [[NSCache alloc] init];

        //Setup the button

        self.loadImageButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

        self.loadImageButton.frame = CGRectMake(20, 415, 280, 37);

        [self.loadImageButton addTarget:self

                                 action:@selector(presentImage)

                       forControlEvents:UIControlEventTouchUpInside];

        [loadImageButton setTitle:@"Present Image" forState:UIControlStateNormal];

        [self.view addSubview:loadImageButton];

        //Setup the UIImageView

        self.myImageView = [[UIImageView alloc] init];

        self.myImageView.frame = CGRectMake(0, 0, 320, 407);

        self.myImageView.contentMode = UIViewContentModeScaleAspectFit;

        [self.view addSubview:self.myImageView];

    }

    - (void)presentImage{

        if(regularLogo){

            NSString *key = @"regular-logo";

            NSPurgeableData *data = [cache objectForKey:key];

            if(!data){

                NSString *bundlePath = [[NSBundle mainBundle] bundlePath];

    NSString *imagePath = [NSString stringWithFormat: @"%@/MobileAppMastery-Log.png", bundlePath];

                data = [NSPurgeableData dataWithContentsOfFile:imagePath];

                [cache setObject:data forKey:key];

                NSLog(@"Retrieved resource(%@) and added to cache", key);

    } else

                NSLog(@"Just retrieved resource(%@)", key);;

            self.myImageView.image = [UIImage imageWithData:data];

            regularLogo = NO;

    } else{

            NSString *key = @"greyscale-logo";

            NSPurgeableData *data = [cache objectForKey:key];

            if(!data){

                NSString *bundlePath = [[NSBundle mainBundle] bundlePath];

    NSString *imagePath = [NSString stringWithFormat:@"%@/MAM_Logo_Square_No_Words_Grayscale.png", bundlePath];

                data = [NSPurgeableData dataWithContentsOfFile:imagePath];

                [cache setObject:data forKey:key];

                NSLog(@"Retrieved resource(%@) and added to cache", key);

    } else

                NSLog(@"Just retrieved resource(%@)", key);

    self.myImageView.image = [UIImage imageWithData:data];

            regularLogo = YES;

        }

    } @end

  • 相关阅读:
    centos7编译安装php 遇到的问题
    linux中以.d结尾的目录
    webpack 的安装与使用
    nginx 设置反向代理
    常用git命令
    windows命令行模式打开目录
    scapy 中sniff指定的数据包并打印指定信息
    python scapy中sniffer的用法以及过滤器
    scapy构造数据包
    21天实战人工智能系列:人工智能产品经理最佳实践(1)
  • 原文地址:https://www.cnblogs.com/guanliyang/p/3907096.html
Copyright © 2020-2023  润新知