iOS 文件操作(NSFileManager)

iOS的沙盒機制,應(yīng)用只能訪問自己應(yīng)用目錄下的文件。iOS不像Android,沒有SD卡概念,不能直接訪問圖像、視頻等內(nèi)容。iOS應(yīng)用產(chǎn)生的內(nèi)容,如圖像、文件、緩存內(nèi)容等都必須存儲在自己的沙盒內(nèi)。默認情況下,每個沙盒含有3個文件夾:Documents, Library 和 tmp。Library包含Caches、Preferences目錄

Documents:蘋果建議將程序創(chuàng)建產(chǎn)生的文件以及應(yīng)用瀏覽產(chǎn)生的文件數(shù)據(jù)保存在該目錄下,iTunes備份和恢復(fù)的時候會包括此目錄

Library:存儲程序的默認設(shè)置或其它狀態(tài)信息;

Library/Caches:存放緩存文件,保存應(yīng)用的持久化數(shù)據(jù),用于應(yīng)用升級或者應(yīng)用關(guān)閉后的數(shù)據(jù)保存,不會被itunes同步,所以為了減少同步的時間,可以考慮將一些比較大的文件而又不需要備份的文件放到這個目錄下。

tmp:提供一個即時創(chuàng)建臨時文件的地方,但不需要持久化,在應(yīng)用關(guān)閉后,該目錄下的數(shù)據(jù)將刪除,也可能系統(tǒng)在程序不運行的時候清除。

APP? Sandbox

iOS怎么獲取沙盒路徑,怎么操作文件呢?下面給出答案。

獲取應(yīng)用沙盒根路徑:

-(void)dirHome

{

? NSString *dirHome=NSHomeDirectory();

? NSLog(@"app_home: %@",dirHome);

}

獲取Documents目錄路徑:

-(NSString *)dirDoc{

//[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSLog(@"app_home_doc: %@",documentsDirectory);

return documentsDirectory;

}

獲取Library目錄

-(void)dirLib{

//[NSHomeDirectory() stringByAppendingPathComponent:@"Library"];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);

NSString *libraryDirectory = [paths objectAtIndex:0];

NSLog(@"app_home_lib: %@",libraryDirectory);

}

獲取Cache目錄路徑:

-(void)dirCache{

NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

NSString *cachePath = [cacPath objectAtIndex:0];

NSLog(@"app_home_lib_cache: %@",cachePath);

}

獲取Tmp目錄路徑:

-(void)dirTmp{

//[NSHomeDirectory() stringByAppendingPathComponent:@"tmp"];

NSString *tmpDirectory = NSTemporaryDirectory();

NSLog(@"app_home_tmp: %@",tmpDirectory);

}

創(chuàng)建文件夾:

-(void *)createDir{

NSString *documentsPath =[self dirDoc];

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];

// 創(chuàng)建目錄

BOOL res=[fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];

if (res) {

NSLog(@"文件夾創(chuàng)建成功");

}else

NSLog(@"文件夾創(chuàng)建失敗");

}

創(chuàng)建文件

-(void *)createFile{

NSString *documentsPath =[self dirDoc];

NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];

BOOL res=[fileManager createFileAtPath:testPath contents:nil attributes:nil];

if (res) {

NSLog(@"文件創(chuàng)建成功: %@" ,testPath);

}else

NSLog(@"文件創(chuàng)建失敗");

}

寫數(shù)據(jù)到文件:

-(void)writeFile{

NSString *documentsPath =[self dirDoc];

NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];

NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];

NSString *content=@"測試寫入內(nèi)容!";

BOOL res=[content writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil];

if (res) {

NSLog(@"文件寫入成功");

}else

NSLog(@"文件寫入失敗");

}

讀文件數(shù)據(jù):

-(void)readFile{

NSString *documentsPath =[self dirDoc];

NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];

NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];

//? ? NSData *data = [NSData dataWithContentsOfFile:testPath];

//? ? NSLog(@"文件讀取成功: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

NSString *content=[NSString stringWithContentsOfFile:testPath encoding:NSUTF8StringEncoding error:nil];

NSLog(@"文件讀取成功: %@",content);

}

文件屬性:

-(void)fileAttriutes{

NSString *documentsPath =[self dirDoc];

NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];

NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:testPath error:nil];

NSArray *keys;

id key, value;

keys = [fileAttributes allKeys];

int count = [keys count];

for (int i = 0; i < count; i++)

{

key = [keys objectAtIndex: i];

value = [fileAttributes objectForKey: key];

NSLog (@"Key: %@ for value: %@", key, value);

}

}

刪除文件:

-(void)deleteFile{

NSString *documentsPath =[self dirDoc];

NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];

BOOL res=[fileManager removeItemAtPath:testPath error:nil];

if (res) {

NSLog(@"文件刪除成功");

}else

NSLog(@"文件刪除失敗");

NSLog(@"文件是否存在: %@",[fileManager isExecutableFileAtPath:testPath]?@"YES":@"NO");

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容