// // ViewController.m // OC17使用文件 // // Created by Zoujie on 15/10/17. // Copyright © 2015年 Zoujie. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // NSFileManager類 提供文件系統對文件或者目錄執行基本操做 // NSFileHandle 提供的方法打開文件並對文件執行屢次讀/寫操做。 #pragma mark 基本的文件操做 [self fileMangerBasic]; #pragma mark 使用NSData類 [self useNSdata]; #pragma mark 使用目錄 [self fileMangerPath]; #pragma mark 枚舉目錄中的內容 // [self enumerater]; #pragma mark 使用路徑 NSPathUtilities.h [self directory]; #pragma mark 複製文件使用NSProcessInfo類 實現基本的複製工具 // [self ProcessInfo]; #pragma mark 基本的文件操做:NSFileHandle [self textNSFileHandle]; #pragma mark NSURL類 [self textNSURL]; #pragma mark NSBundle類 [self textNSBundle]; } -(void)fileMangerBasic { // 假定存在一個名爲「」textfile「的文件 NSString *fName = @"textfile"; NSFileManager *fm; NSDictionary *attr; NSData *data; // 從文件中讀取數據 data = [fm contentsAtPath:fName]; NSLog(@"%@",data); // 須要建立文件管理器的實例 fm = [NSFileManager defaultManager]; // 首先肯定測試文件存在 if ([fm fileExistsAtPath:fName] == NO) { NSLog(@"File doesn'y exist!"); } // 建立一個副本 if ([fm copyItemAtPath:fName toPath:@"newfile" error:NULL] == NO) { NSLog(@"File Copy failed!"); } // 測試兩個文件是否一致 if ([fm contentsEqualAtPath:fName andPath:@"newfile"] == NO) { NSLog(@"File are Not Equal"); } // 重命名副本 if ((attr = [fm attributesOfItemAtPath:@"newfile2" error:NULL]) == nil) { NSLog(@"Couldn't get file attributes"); } // 獲取 newfile2 的大小 if ((attr = [fm attributesOfItemAtPath:@"newfile2" error:NULL])== nil) { NSLog(@"Couldn't get file attributes"); } NSLog(@"File Size is %llu bytes",[[attr objectForKey:NSFileSize] unsignedLongLongValue]); // 最後刪除原始文件 if ([fm removeItemAtPath:@"fName" error:NULL] == NO) { NSLog(@"file removal failed"); } NSLog(@"All operations were successful"); // 顯示新建立的文件內容 ,將文件的內容讀入到一個字符串對象 ,NSUTF8StringEncoding說明文件包含常規的UTF8 ASCII字符 NSLog(@"%@",[NSString stringWithContentsOfFile:@"newfile2" encoding:NSUTF8StringEncoding error:NULL]); } -(void)useNSdata { //NSData 數據臨時讀入,收集 // 32位應用程序,NSData組多可存儲2GB數據,64位應用程序,最多能夠存儲8EB,即8億GB的數據。 NSFileManager *fm; NSData *fileData; fm = [NSFileManager defaultManager]; // 讀取文件 newfile2 fileData = [fm contentsAtPath:@"newfile2"];//僅僅接受一個路徑名,並將指定文件的內容讀入該方法建立的存儲區 if (fileData == nil) { NSLog(@"File read failed"); } // 將數據寫入newfile3 if([fm createFileAtPath:@"newfile3" contents:fileData attributes:nil] == NO) { NSLog(@"Couldn't create the copy"); return; } NSLog(@"File copy was successful"); } -(void)fileMangerPath { NSString *dirName = @"testdir"; NSString *path; NSFileManager *fm; // 須要建立文件管理器的實例 fm = [NSFileManager defaultManager]; // 獲取當前目錄 path = [fm currentDirectoryPath]; NSLog(@"Current directory path is %@",path);// 路徑"/"說明應用的根目錄實在運行他得沙盒中,並非整個iOS設備文件目錄的根 // 建立一個新目錄 if ([fm createDirectoryAtPath:dirName withIntermediateDirectories:YES attributes:nil error:NULL] == NO) { NSLog(@"Couldn't create directory"); } // 重命名新的目錄 if ([fm moveItemAtPath:dirName toPath:@"newdir" error:NULL] == NO) { NSLog(@"Directory rename failed"); } // 更改目錄到新的目錄 if ([fm changeCurrentDirectoryPath:@"newdir"] == NO) { NSLog(@"Change directory failed"); } // 獲取並顯示當前的工做目錄 path = [fm currentDirectoryPath]; NSLog(@"Current directory path os %@",path); NSLog(@"All operation were successful"); } -(void)enumerater { NSString *path; NSFileManager *fm; NSDirectoryEnumerator *dirEnum; NSArray *dirArray; // 須要建立文件管理器的實例 fm = [NSFileManager defaultManager]; // 獲取當前工做目錄的路徑 path = [fm currentDirectoryPath]; // 枚舉目錄 dirEnum = [fm enumeratorAtPath:path]; NSLog(@"Contents of %@",path); while ((path = [dirEnum nextObject]) != nil) { NSLog(@"%@",path); } // 另外一種枚舉目錄的方法 dirArray = [fm contentsOfDirectoryAtPath:[fm currentDirectoryPath] error:NULL]; NSLog(@"Contents using contentsOfDirectoryAtPath:error:"); for (path in dirArray) { NSLog(@"%@",path); } } -(void)directory { NSLog(@"**************一些路徑的基本操做***********"); NSString *fName = @"path.m"; NSFileManager *fm ; NSString *path,*tempdir,*extension,*homedir,*fullpath; NSArray *components; fm = [NSFileManager defaultManager]; // 獲取臨時的工做目錄 tempdir = NSTemporaryDirectory(); NSLog(@"Temporary Directory is %@",tempdir); // 從當前目錄中提取基本目錄 path = [fm currentDirectoryPath]; NSLog(@"Base dir is %@",[path lastPathComponent]); // 建立文件fName 在當前目錄中得完整路徑 fullpath = [path stringByAppendingPathComponent:fName]; NSLog(@"fullpath to %@ is %@",fName,fullpath); // 獲取文件擴展名 extension = [fullpath pathExtension]; NSLog(@"extension for is %@ is %@",fullpath,extension); // 獲取用戶的主目錄 homedir = NSHomeDirectory(); NSLog(@"Your home directory is : %@",homedir); // 拆分路徑爲各組成部分 components = [homedir pathComponents]; for (path in components) NSLog(@"%@",path); NSString *str = [self saveFilePath]; NSLog(@"%@",str); } //查找系統的特殊目錄 如Applicatioin 和Documents 目錄 -(NSString *) saveFilePath { NSArray *dirList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDir = dirList[0]; return [docDir stringByAppendingPathComponent:@"saveFile"]; } -(void)ProcessInfo { // 使用命令行工具實現簡單地文件複製 // copy from-file to-file [NSProcessInfo processInfo];//返回當前進程的信息 NSProcessInfo *info = [[NSProcessInfo alloc]init]; NSLog(@"%@",[info processName]);//正在執行的進程名稱 NSFileManager *fm; NSString *source,*dest; BOOL isDir; NSProcessInfo *proc = [NSProcessInfo processInfo]; NSArray *args = [proc arguments];//返回當前進程的參數 fm = [NSFileManager defaultManager]; // 檢查命令行中得兩個參數 if ([args count] != 3) { NSLog(@"Usage: %@ src dest",[proc processName]); } source = args[0]; dest = args[1]; // 肯定可以讀取源文件 if ([fm isReadableFileAtPath:source] == NO) { NSLog(@"Can't read %@",source); } // 目標文件是不是一個目錄 // 如果,添加源到目標的結尾 [fm fileExistsAtPath:dest isDirectory:&isDir]; if (isDir == YES) { dest = [dest stringByAppendingPathComponent:[source lastPathComponent]]; } // 若目標文件已存在,則刪除文件 [fm removeItemAtPath:dest error:NULL]; // 執行復制 if([fm copyItemAtPath:source toPath:dest error:NULL] == NO) { NSLog(@"Copy failed!"); return; } } -(void)textNSFileHandle { //假設存在一個"textFile"文件 NSFileHandle *inFile,*outFile; NSData *buffer; // 打開文件textfile 並讀取 inFile = [NSFileHandle fileHandleForReadingAtPath:@"textfile"]; if (inFile == nil) { NSLog(@"Open of textfile for reading failed"); } // 若是須要,首先建立輸出文件 [[NSFileManager defaultManager] createFileAtPath:@"textout" contents:nil attributes:nil]; // 打開outfile文件進行寫入 outFile = [NSFileHandle fileHandleForWritingAtPath:@"textout"]; if (outFile == nil) { NSLog(@"Open of textout for writing failed"); } // 由於它可能包含數據截斷輸出文件 [outFile truncateFileAtOffset:0]; // 從infile 中讀取數據,將它寫到outFile buffer = [inFile readDataToEndOfFile]; [outFile writeData:buffer]; // 關閉這兩個文件 [inFile closeFile]; [outFile closeFile]; // 驗證文件的內容 NSLog(@"%@",[NSString stringWithContentsOfFile:@"textout" encoding:NSUTF8StringEncoding error:NULL]); // 追加文件"fileA" 到「fielB」的末尾 [self add]; } -(void)add { NSFileHandle *inFile,*outFile; NSData *buffer; // 打開文件fileA進行讀取 inFile = [NSFileHandle fileHandleForReadingAtPath:@"fileA"]; if (inFile == nil) { NSLog(@"Open of fileA for reading failed"); } // 打開文件fileB進行更新 outFile = [NSFileHandle fileHandleForWritingAtPath:@"fileB"]; if (outFile == nil) { NSLog(@"Open of fileB for writing failed"); } // 在outFile的末尾進行查找 [outFile seekToEndOfFile]; // 從inFile 中讀取數據,將它寫到outFile buffer = [inFile readDataToEndOfFile]; [outFile writeData:buffer]; // 關閉兩個文件 [inFile closeFile]; [outFile closeFile]; // 驗證它的內容 NSLog(@"%@",[NSString stringWithContentsOfFile:@"fileB" encoding:NSUTF8StringEncoding error:NULL]); } -(void)textNSURL { NSURL *myURL = [NSURL URLWithString:@"http://classroomM.com"]; NSString *myHomePage = [NSString stringWithContentsOfURL:myURL encoding:NSASCIIStringEncoding error:NULL]; NSLog(@"%@",myHomePage); } -(void)textNSBundle { NSString *txtFilePath = [[NSBundle mainBundle]pathForResource:@"instructions" ofType:@"txt"];//返回文件路徑,隨後就能夠讀取文件的內容到程序中 //好比,本地化字符串,不一樣語言的文字 NSString *instructions = [NSString stringWithContentsOfFile:txtFilePath encoding:NSUTF8StringEncoding error:NULL]; // 列出應用包中圖片目錄中以jpg爲文件後綴的圖片 NSArray *birds = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg" inDirectory:@"birdImages"]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end