文档章节

OC16使用文件

阿元
 阿元
发布于 2015/10/19 23:56
字数 1520
阅读 28
收藏 1
点赞 0
评论 0
//
//  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


© 著作权归作者所有

共有 人打赏支持
阿元
粉丝 5
博文 154
码字总数 98469
作品 0
浦东
程序员
在 Linux 下 9 个有用的 touch 命令示例

命令用于创建空文件,也可以更改 Unix 和 Linux 系统上现有文件时间戳。这里所说的更改时间戳意味着更新文件和目录的访问以及修改时间。 让我们来看看 命令的语法和选项: 语法: 命令中使用...

作者: Pradeep Kumar ⋅ 05/02 ⋅ 0

Linux压缩好帮手bzip2

导读 对文件进行压缩,可以通过使用较少的字节对文件中的数据进行编码来显著地减小文件的大小,并且在跨网络的文件的备份和传送时很有用。 另一方面,解压文件意味着将文件中的数据恢复到初始...

问题终结者 ⋅ 05/12 ⋅ 0

find 命令的参数详解

使用name选项 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。 可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。不管当前路径是什么,...

linuxprobe16 ⋅ 2016/11/17 ⋅ 0

Tar 命令的详细用法

tar命令 tar 文件是几个文件和(或)目录在一个文件中的集合。这是创建备份和归档的佳径。 tar 使用的选项有: -c 创建一个新归档。 -f 当与 -c 选项一起使用时,创建的 tar 文件使用该选项指...

小编辑 ⋅ 2010/04/25 ⋅ 0

安卓应用安全指南 4.6.1 处理文件 示例代码

安卓应用安全指南 4.6.1 处理文件 示例代码 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0 如上所述,文件原则上应该是私有的。 但是...

apachecn_飞龙 ⋅ 03/22 ⋅ 0

ActiveMQ传输文件的几种方式原理与优劣

本文讨论ActiveMQ传输文件的几种方法的原理及其利弊,作为消息发送、直接传输文件、使用ftp或http中转。最后介绍扩展ActiveMQ实现自定义文件传输方式,讨论如何实现高效的文件传输。by kimm...

chaun ⋅ 2015/04/17 ⋅ 0

linux 常用基本命令之 touch cp file rm mv cat 的介绍与使用

1 touch:创建空文件,若文件名存在,则修改文件的时间记录为x现在的时间;若文件不存在,则创建一个新的文件。使用格式:touch 【选项】【文件名】 常用选项说明: -a (access):改变文件的读...

lyj19911101 ⋅ 2014/04/16 ⋅ 0

在 Linux 中如何归档文件和目录

在我们之前的教程中,我们讨论了如何使用 gzip 和 bzip2 压缩和解压缩文件。在本教程中,我们将学习如何在 Linux 归档文件。归档和压缩有什么不同吗?你们中的一些人可能经常认为这些术语有相...

07% ⋅ 06/01 ⋅ 0

嵌入式Qt方案中文显示系列:国际化支持实现

上文提到了Qt的国际化支持方案,这里对这一方案进行简要的说明。 使用Qt的国际化支持和翻译机制功能来实现中文的显示,中文字库的支持还是必需的,然后就是使用的Qte库必须包含了翻译特性,不...

水海云 ⋅ 2013/04/07 ⋅ 2

使用 OpenSSL 对文件进行加密和解密

我们在平时的 Linux 运维管理的时候,经常会进行各种数据备份任务。将数据导出然后打包。通常在安全性要求比较高的环境下,我们可以借助 OpenSSL 工具对打包后的数据进行加密,这样能进一步的...

羊驼君 ⋅ 2016/11/17 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java软件工程师简历中项目经验怎么写?

作者:暗灭 链接:https://www.zhihu.com/question/20695310/answer/180691302 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 直接给你贴个我自己的简历...

颖伙虫 ⋅ 20分钟前 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部