1. 程式人生 > >iOS激情詳解之資料夾建立,移動,複製,刪除以及歸檔和反歸檔

iOS激情詳解之資料夾建立,移動,複製,刪除以及歸檔和反歸檔

<span style="font-size:18px;">主要程式碼精髓:</span>

#import "RootViewController.h"
#import “DXModel.h"

#define kDocumentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]
#define kCachesPath [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]
@interface RootViewController ()

@end

@implementation RootViewController

- (void)viewDidLoad {
      [super viewDidLoad];
      [self createFile];
      [self moveFile];
      [self copyFile];
      [self deleteFile];
      [self isExistFild];
      [self unArchive];
      [self unArchive];
}

// 建立一個資料夾    ********************************
- (void)createFile
{
    // 需求 在documents下建立一個download資料夾
    NSArray *documentsArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentPath = documentsArr[0];
    // 拼接路徑
    NSString *downloadPath = [documentPath stringByAppendingPathComponent:@"Download"];
    // 建立資料夾
    // 檔案管理者 這個類是個單例類 用來對檔案進行操作
    NSFileManager *manager = [NSFileManager defaultManager];
    // withIntermediateDirectories; 如果你YES的情況下,要建立的檔案存在的話可以對其進行覆蓋,反之情況,檔案存在的話不能對其覆蓋(建立失敗)
   BOOL isCreatFile = [manager createDirectoryAtPath:downloadPath withIntermediateDirectories:YES attributes:nil error:nil];

    NSLog(@"%d", isCreatFile);
}

// 移動資料夾    ********************************
- (void)moveFile
{
    // 獲取原來路徑 定義一個巨集
    NSString *oldPath = [kDocumentPath stringByAppendingPathComponent:@"Download"];
    // 獲取新路徑 library 下的Caches 資料夾 再定義一個巨集
    NSString *newPath = [kDocumentPath stringByAppendingPathComponent:@"Download"];
    // 建立檔案管理者類的物件(單例物件)
    NSFileManager *manager = [NSFileManager defaultManager];
    // 移動資料夾
    BOOL isMoved = [manager moveItemAtPath:oldPath toPath:newPath error:nil];
   //  NSLog(@"%@", lesson)
    NSLog(@"%d", isMoved);
}

// 複製資料夾    ********************************
- (void)copyFile
{
    // library 下的Caches資料夾 download 複製到document資料夾下
    NSString *oldPath = [kCachesPath stringByAppendingPathComponent:@"download"];
    NSString *newPath = [kDocumentPath stringByAppendingPathComponent:@"download"];
    // 建立檔案管理物件
     NSFileManager *manager = [NSFileManager defaultManager];
    //複製
    BOOL isCopy = [manager copyItemAtPath:newPath toPath:oldPath error:nil];
    NSLog(@"%d", isCopy);
    NSLog(@"%@", newPath);
}

// 刪除資料夾    ********************************
- (void)deleteFile
{
    // 獲取要刪除的路徑
    NSString *deletePath = [kDocumentPath stringByAppendingPathComponent:@"Download"];
    // 建立檔案管理物件
    NSFileManager *manager = [NSFileManager defaultManager];
    // 刪除
    BOOL isDelete = [manager removeItemAtPath:deletePath error:nil];
    NSLog(@"%d", isDelete);
}

// 判斷一個檔案是否存在  ********************************
- (void)isExistFild
{
    NSString *path = [kCachesPath stringByAppendingPathComponent:@"Download"];
    // 建立檔案管理物件
    NSFileManager *manager = [NSFileManager defaultManager];
   BOOL isExist = [manager isExecutableFileAtPath:path];
    NSLog(@"%d", isExist);

// 複雜物件歸檔
- (void)archive
{
    // 歸檔前需要初始化物件
    DXModel *model = [[DXModel alloc] init];
    // 賦值物件
    model.name = @“DX";
    model.age = 19;
    // 這裡可以設定個圖片轉成data
    // 把一個png格式的轉化成data格式
    model.data = UIImagePNGRepresentation([UIImage imageNamed:@"bg_nav"]);
    // 建立一個可變的data 初始化歸檔物件
    NSMutableData *data = [NSMutableData data];

    // 建立一個歸檔物件 需要一個可變的就在上面建立一個
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
    // 進行歸檔編碼
    [archiver encodeObject:model forKey:@"DXModel"];
    // 編碼完成
    [archiver finishEncoding];
    // 實際上歸檔 相當於把編碼完的物件,儲存到data中
    NSLog(@"%@",data);

    //把存有複雜物件的data寫入檔案中 進行持久化
    // 1,搞路徑
    NSString *dataPath = [kDocumentPath stringByAppendingPathComponent:@"DXModel.da"];

    // 2,調寫入方法
  BOOL is = [data writeToFile:dataPath atomically:YES];
    // 釋放物件
    [archiver release];<pre name="code" class="objc">#import “DXModel.h"

@implementation DXModel

- (void)dealloc
{
    [_name release];
    [_data release];
    [super dealloc];
}
//  對複雜物件進行持久化 叫做 歸檔與反歸檔(編碼與解碼)

// 歸檔方法:編碼成可以持久化的格式
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    // 對每一個屬性都要進行編碼
    // 注意:屬性的型別
    [aCoder encodeObject:self.name forKey:@"name"];
    // 除了物件型別,其他型別,其他方法都有特殊的編碼方法
    [aCoder encodeInteger:self.age forKey:@"age"];
    [aCoder encodeObject:self.data forKey:@"data"];
}
// 反歸檔
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self) {
        // 解碼過程
        // 跟編碼一樣 除了物件型別以外 也是有特殊解碼方法
        // 注意:編碼的時候給的key 要和 解碼的key一樣
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
        self.data = [aDecoder decodeObjectForKey:@"data"];
    }
    return self;
}
@end

#import “DXModel.h"

@implementation DXModel

- (void)dealloc
{
    [_name release];
    [_data release];
    [super dealloc];
}
//  對複雜物件進行持久化 叫做 歸檔與反歸檔(編碼與解碼)

// 歸檔方法:編碼成可以持久化的格式
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    // 對每一個屬性都要進行編碼
    // 注意:屬性的型別
    [aCoder encodeObject:self.name forKey:@"name"];
    // 除了物件型別,其他型別,其他方法都有特殊的編碼方法
    [aCoder encodeInteger:self.age forKey:@"age"];
    [aCoder encodeObject:self.data forKey:@"data"];
}
// 反歸檔
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self) {
        // 解碼過程
        // 跟編碼一樣 除了物件型別以外 也是有特殊解碼方法
        // 注意:編碼的時候給的key 要和 解碼的key一樣
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
        self.data = [aDecoder decodeObjectForKey:@"data"];
    }
    return self;
}
@end

}// 反歸檔解碼過程:給他一個data,給咱一個model- (void)unArchive{ // data路徑 NSString *dataPath = [kDocumentPath stringByAppendingPathComponent:@"DXModel.da"]; // 獲取剛才歸檔的物件 NSData *data = [NSData dataWithContentsOfFile:dataPath]; // 建立 反歸檔物件 NSKeyedUnarchiver *unarchive = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; // 解碼返回一個物件 // 這個Forkey一定要和剛才歸檔的時候一樣 DXModel *model = [unarchive decodeObjectForKey:@"DXModel"]; // 反歸檔完成 [unarchive finishDecoding]; // 釋放反歸檔物件 [unarchive release]; NSLog(@"-----%@", model.name); UIImage *image = [UIImage imageWithData:model.data]; NSLog(@"------%@",image);}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
#import <Foundation/Foundation.h>

 // 複雜物件需要進行持久化 需要遵守一個協議<NSCoding>

@interface DXModel : NSObject<NSCoding>

@property (nonatomic, retain)NSString *name;
@property (nonatomic, assign)NSInteger age;
@property (nonatomic, retain)NSData *data;
@end
#import “DXModel.h"

@implementation DXModel

- (void)dealloc
{
    [_name release];
    [_data release];
    [super dealloc];
}
//  對複雜物件進行持久化 叫做 歸檔與反歸檔(編碼與解碼)

// 歸檔方法:編碼成可以持久化的格式
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    // 對每一個屬性都要進行編碼
    // 注意:屬性的型別
    [aCoder encodeObject:self.name forKey:@"name"];
    // 除了物件型別,其他型別,其他方法都有特殊的編碼方法
    [aCoder encodeInteger:self.age forKey:@"age"];
    [aCoder encodeObject:self.data forKey:@"data"];
}
// 反歸檔
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self) {
        // 解碼過程
        // 跟編碼一樣 除了物件型別以外 也是有特殊解碼方法
        // 注意:編碼的時候給的key 要和 解碼的key一樣
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
        self.data = [aDecoder decodeObjectForKey:@"data"];
    }
    return self;
}
@end


相關推薦

iOS激情資料建立,移動,複製,刪除以及歸檔歸檔

<span style="font-size:18px;">主要程式碼精髓:</span> #import "RootViewController.h" #import “DXModel.h" #define kDocumentPath [NSS

iOS激情Core Data

先了解一下 Core Data 它相當於封裝了sqlite 1.Core Data 是資料持久化儲存的最佳方式,一般資料最終的儲存型別可以是:SQLite資料庫,XML,二進位制,記憶體裡,或自定義資

ios激情動畫3D旋轉晃動

// // Created by WDX on 15/9/23. // Copyright (c) 2015年 WDongXu. All rights reserved. // #import "

iOS激情Swift (四)

<span style="font-size:18px;">// 結構體和類 // 在swift中,結構體被做了很多強化,幾乎所有的資料型別都是用結構體實現的 // 相同點; 1,都可以定義變數,2.都可以定義方法3,都可以定義構造器 init 4.都可以遵守協

ALSA音效卡驅動中的DAPM五:建立widget之間的連線關係

前面我們主要著重於codec、platform、machine驅動程式中如何使用和建立dapm所需要的widget,route,這些是音訊驅動開發人員必須要了解的內容,經過前幾章的介紹,我們應該知道如何在alsa音訊驅動的3大部分(codec、platform、machin

Spring架構BeanFactory的建立-上

下面是更新BeanFactory的方法程式碼: 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 3

IOS SDKNSArray/NSMutableArray

原創Blog,轉載請註明出處 前言:本文會首先講一下本人使用NSArray的幾個小技巧,然後詳解下常用的屬性和方法。 一 NSArray/NSMutableArray簡介    NSArray儲存的是一組物件的陣列,這些物件是有序的,NSArray內容不可改變,如果需要可

iOS SDK視訊播放(AVPlayer)附Demo

前言 最近在研究視訊播放,所以研究了下這個類,學習的過程中寫了個簡單的Demo,這裡寫出來分析給想要的人呢。實現了 透明的導航欄 螢幕垂直的時候小螢幕/水平大螢幕之前的切換,支援螢幕旋轉觸發,按鍵觸發 重播 播放/暫停 顯示播放進度 隱藏控制圖示,

iOS瘋狂UITableView的全選多選功能

   [tableViewdeselectRowAtIndexPath:indexPath animated:YES];         Custom *cell= (Custom*)[tableView cellForRowAtIndexPath:indexPath];         NSUInteger

file外掛的使用(檔案的建立、讀寫,資料建立等)

Cordova 提供了一個 file 外掛,通過這個外掛我們很方便地實現在各種裝置下對檔案、和資料夾進行訪問,編輯等各種操作。 一、新增File外掛首先我們要在“終端”中進入工程所在的目錄,然後執行如下命令新增 file 外掛: 1 cordova plug

資料hdfs三:put許可權剖析與常用命令

–無論是對於hdfs的讀和寫,對於使用者來說都是無感知的、透明的操作,使用者並不關心資料如何讀出來如何寫進去的,只要返回一個結果告訴使用者資料讀出來了或寫進去了,至於怎麼讀怎麼寫,使用者並不關心 補充: 讀:hdfs dfs -ls / = hdfs dfs

資料hdfspid檔案剖析

pid 預設儲存在/tmp目錄下,pid裡面的內容就是程序號 pid檔案刪除,不影響服務正常執行和使用者的讀寫,但是: Stop:關閉不掉 start:重新起另一個程序 例如將namenode的pid 檔案刪除掉: [[email protected

Cocoapods---建立私有倉庫篇

一、概述 CocoaPods是iOS,Mac下優秀的第三方包管理工具,類似於java的maven,給我們專案管理帶來了極大的方便。個人或公司在開發過程中,會積累很多可以複用的程式碼包,有些我們不想開源,又想像開源庫一樣在CocoaPods中管理它們,那麼通過

Linux核心中RAID5原始碼基本架構與資料結構

Linux核心中RAID5的基本架構與資料結構解析 眾所周知,早年的計算機儲存資料現在磁帶上,然後發展到了磁碟,然而僅僅是單個盤,速度和效能都不是很好,然是,要知道人類的聰明才智是連ET都想不到的,前輩們不斷的猜想,實驗來提高計算機的效能,於是磁碟陣列問世

資料結構排序系列九 桶排序

基本思想:假定輸入是由一個隨機過程產生的[0, M)區間上均勻分佈的實數。將區間[0, M)劃分為n個大小相等的子區間(桶),將n個輸入元素分配到這些桶中,對桶中元素進行排序,然後依次連線桶輸入0 ≤A[1..n] <M輔助陣列B[0..n-1]是一指標陣列,指向桶(

iOS 開發 Object-CJavaScript互動OC與JS互動在WKWebView中使用

1.OC與JS互動在UIWebView中使用 2. WKWebView的使用詳解 3.OC與JS互動在WKWebView中使用 // // ViewController.m // oc與js互動WKWebView // // Cr

Oracle記憶體四 Buffer Cache 資料緩衝區

一. 官網說明 Memory Architecture              The database buffer cache is the portion of the SGA that holds copies of data blocks read from

適配iPhoneXiOS專案新增啟動圖片LaunchImage的3種方式

啟動圖片測試環境:Xcdoe 9iOS11這篇文章,主要是解決公司釋出多個馬甲app,啟動圖片和圖片放到了專案普通資料夾下的情況,文章可以參考我之前寫的。 如果公司只是固定的產品,那直接放到Images.xcassets 下或者使用LanunchScreen.xib是最好的選

Redis資料結構List(二)

Redis中關於List列表的命令詳解  1、redis中list列表的資料插入命令:lpush,rpush,linsert 127.0.0.1:6379>rpush mylist 1   ---結果為:(integer) 1 127.0.0.1:6379&g

STM32 備份域(備份暫存器、備份SRAM)資料丟失問題處理

某些STM32晶片提供了備份SRAM,例如STM32F系列晶片有4K的備份SRAM。然而在使用過程中發現備份區域資料丟失!下面從STM32系列晶片提供的整個備份域來看看啥情況。 電池備份域   首先,這部分在參考手冊的電源(PWR)章節有詳細的介紹。器件的工作電