沙盒機制
每一個iOS應用程式都會為自己建立一個檔案系統目錄,這個獨立、封閉、安全的空間叫做沙盒。沙盒就是一種安全體系,它規定了應用程式隻能在自己的檔案系統目錄内通路檔案,不可以通路其他應用沙盒内的内容。所有的非代碼檔案都儲存在這個地方。
沙盒根目錄結構:Documents、Library、temp

image
Documents
儲存應用運作時生成的需要持久化的資料,iTunes備份和恢複的時候會包括此目錄,是以蘋果建議将程式中建立的或在程式中浏覽到的檔案資料儲存在該目錄下。
Library
Caches:存放緩存檔案,iTunes不會備份此目錄,此目錄下檔案不會在應用退出後删除 。一般存放體積比較大,不是特别重要的資源。
Preferences:儲存APP的所有偏好設定,iOS的Settings(設定)應用會在該目錄中查找應用的設定資訊,iTunes會自動備份該目錄。注意:通過NSUserDefaults類來讀取和設定。
tmp
儲存應用運作時所需的臨時資料,這個可以放一些當APP退出後不再需要的檔案。應用沒有運作時,系統也有可能會清除該目錄下的檔案,iTunes不會同步該目錄。iPhone重新開機時,該目錄下的檔案會被删除。
如何檢視該目錄?
XCode->Window->Devices->真機->Installed Apps->應用->ShowContainer
image.png
也可以點選DownloadContainer下載下傳該沙盒檔案檢視内容
擷取相關目錄
[toc]
相關檔案操作
--
建立檔案夾
建立檔案
寫資料
追加寫資料
讀檔案資料
擷取檔案夾下所有的檔案清單
擷取檔案夾下所有檔案(深度周遊)
移動檔案
删除檔案
删除檔案夾
删除某些字尾的檔案
擷取檔案大小
擷取檔案的資訊(包含了上面檔案大小)
1、NSFileManager(檔案管理對象)
主要是對檔案進行的操作(建立/删除/改名等)以及檔案資訊的擷取。
方法
說明
@property (class, readonly, strong) NSFileManager *defaultManager
建立檔案管理對象
-(BOOL)fileExistsAtPath:(NSString *)path isDirectory:(nullable BOOL *)isDirectory
判斷某個路徑是否存在,isDirectory是一個指針,表示該路徑是否是目錄
-(BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(nullable NSDictionary<NSString *, id> *)attributes error:(NSError **)error
建立一個目錄
-(BOOL)createFileAtPath:(NSString *)path contents:(nullable NSData *)data attributes:(nullable NSDictionary<NSString *, id> *)attr
建立一個檔案,可順便寫入data
-(BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile
NSData類型的寫入資料,讀資料請自行查閱
-(BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error
NSString、NSArray、NSDictionary的寫入資料,讀資料請自行查閱
-(nullable NSArray<NSString *> *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error
擷取目前檔案夾下的檔案/目錄
-(BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
移動檔案,可用來重命名
-(BOOL)copyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL error:(NSError **)error
複制檔案
-(BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error
-(nullable NSDictionary<NSFileAttributeKey, id> *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error
擷取檔案資訊(檔案大小、修改時間、所有者等)
</b>
2、NSFileHandle(檔案連接配接器)
主要是對檔案内容進行讀取和寫入操作
+(nullable instancetype)fileHandleForWritingAtPath:(NSString *)path
寫的方式打開檔案
+(nullable instancetype)fileHandleForReadingAtPath:(NSString *)path
讀的方式打開檔案
-(unsigned long long)seekToEndOfFile
跳到檔案末尾
-(void)seekToFileOffset:(unsigned long long)offset
跳到指定偏移位置
-(void)truncateFileAtOffset:(unsigned long long)offset
将檔案的長度設為offset位元組
-(NSData *)readDataToEndOfFile
從目前位元組讀取到檔案到末尾資料
-(NSData *)readDataOfLength:(NSUInteger)length
從目前位元組讀取到指定長度資料
-(void)synchronizeFile
同步檔案,通常用在寫入資料後
-(void)closeFile
關閉檔案
上述資料操作,支援的類型僅僅是NSString、NSArray、NSDictionary、NSData類型,這些都資料類型都支援了NSCoding協定,可以進行資料持久化。如果我們想存儲如UIImage、自定義的對象等類型,我們都需要将其轉換為NSData類型,如轉換UIImage為NSData使用UIImagePNGRepresentation(image)等方法,而自定義對象類型則需要進行歸檔、反歸檔來進行存取操作
存:
對象->歸檔->NSData->檔案寫入
取:
檔案讀取->NSData->反歸檔->對象
自定義對象需要遵守NSCoding協定并實作
兩個方法
作者:程式圓圓
連結:https://www.jianshu.com/p/52aa11712ba0
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。