OC16使用文件

//
//  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
相關文章
相關標籤/搜索