zoukankan      html  css  js  c++  java
  • NSFileHandle类

    Objective-C使用NSFileHandle类对文件进行基本操作,IOS文件操作


    NSFileHandle类中得方法可以对文件进行基本的读写,偏移量的操作。
    NSFileHandle基本步骤:
    1、打开文件,获取一个NSFileHandle对象。
    2、对打开NSFileHandle的文件对象行I/O操作
    3、关闭文件对象


    NSFileHandle常用方法:

    +(NSFileHandle*)fileHandleForReadingAtPath:path 打开一个文件用于读入

    +(NSFileHandle*)fileHandleForWritingAtPath:path 打开一个文件用于写入

    +(NSFileHandle*)fileHandleForUpdatingAtPath:path 打开一个文件用于读写

    -(NSData*)availableData 从设备或者通道返回可用数据

    -(NSData*)readDataToEndOfFile 读取其余的数据知道文件的末尾(最多UINT_MAX字节)

    -(NSData*)readDataOfLength:(NSUInteger)bytes 从文件中读取指定字节的内容

    -(void)writeData:data  将data写入文件

    -(unsigned long long)offsetInFile 获取当前偏移量

    -(void)seekToFileOffset:offset  设置偏移量

    -(unsigned long long)seekToEndOfFile 将偏移量定位到文件的末尾

    -(void)truncateFileAtOffset:offset 讲文件的长度设置为offset字节

    -(void)closeFile 关闭文件


    方法fileHandleForWritingAtPath和fileHandleForUpdatingAtPath所指定的文件必须是已经存在的,否则返回nil,另外对于这两个方法中文件的偏移量都是为文件的开始。


    方法readDataToEndOfFile每次从文件中读取最多UNIT_MAX字节的数据,这个量定义在
    <limits.h>中。


    在UNIX系统下编程打开文件进行写入并不会截断文件,需要自己完成截断


    1、实例程序,通过程序对文件进行一些基本操作:

      1. //  
      2. //  main.m  
      3. //  NSFileHandle  
      4. //  
      5. //  Created by swinglife on 13-11-14.  
      6. //  Copyright (c) 2013年 swinglife. All rights reserved.  
      7. //  
      8.   
      9.   
      10. #import <Foundation/Foundation.h>  
      11.   
      12.   
      13. int main(int argc, const charchar * argv[])  
      14. {  
      15.   
      16.   
      17.     @autoreleasepool {  
      18.         NSFileHandle *inFile,*outFile;  
      19.         NSData *buffer;  
      20.         NSString *fileContent = @"这些是文件内容,这些是文件内容,这些是文件内容,这些是文件内容,这些是文件内容";  
      21.         NSFileManager *fm = [NSFileManager defaultManager];  
      22.           
      23.         //创建一个文件  
      24.         [fm createFileAtPath:@"testFile.txt" contents:[fileContent dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];  
      25.         //创建一个需要写入的文件  
      26.         [fm createFileAtPath:@"outFile.txt" contents:nil attributes:nil];  
      27.           
      28.         //读取文件  
      29.         inFile = [NSFileHandle fileHandleForReadingAtPath:@"testFile.txt"];  
      30.         //写入文件  
      31.         outFile = [NSFileHandle fileHandleForWritingAtPath:@"outFile.txt"];  
      32.           
      33.         if(inFile!=nil){  
      34.             //读取文件内容  
      35.             buffer = [inFile readDataToEndOfFile];  
      36.               
      37.             //将文件的字节设置为0,因为他可能包含数据  
      38.             [outFile truncateFileAtOffset:0];  
      39.               
      40.             //将读取的内容内容写到outFile.txt中  
      41.             [outFile writeData:buffer];  
      42.               
      43.             //关闭输出  
      44.             [outFile closeFile];  
      45.               
      46.             //验证outFile内容  
      47.             NSLog(@"%@",[NSString stringWithContentsOfFile:@"outFile.txt" encoding:NSUTF8StringEncoding error:NULL]);  
      48.               
      49.               
      50.             //创建一个新的文件用来循环写入  
      51.             [fm createFileAtPath:@"outFile2.txt" contents:nil attributes:nil];  
      52.               
      53.             //打开一个新的输出  
      54.             outFile = [NSFileHandle fileHandleForWritingAtPath:@"outFile2.txt"];  
      55.               
      56.             //设置一个循环写入10条数据,每条数据都再后面添加上而不是覆盖  
      57.             for (int i = 0; i<10; i++) {  
      58.                 //将偏移量设置为文件的末尾  
      59.                 [outFile seekToEndOfFile];  
      60.                 //写入数据  
      61.                 [outFile writeData:buffer];  
      62.             }  
      63.               
      64.             //验证内容  
      65.             NSLog(@"outFile2:%@",[NSString stringWithContentsOfFile:@"outFile2.txt" encoding:NSUTF8StringEncoding error:NULL]);  
      66.               
      67.             //关闭所有  
      68.             [outFile closeFile];  
      69.             [inFile closeFile];  
      70.               
      71.               
      72.         }  
      73.          
      74.           
      75.     }  
      76.     return 0;  
      77. }  
  • 相关阅读:
    8张图理解Java
    PhotoShop切图
    Java中堆内存和栈内存详解【转】
    Java编程性能优化一些事儿【转】
    Java反射机制--笔记
    JUnit单元测试--IntelliJ IDEA
    深入理解Java:自定义java注解
    基于值函数的强化学习 小例子(策略退化)
    动态规划中 策略迭代 和 值迭代 的一个小例子
    爬格子问题(经典强化学习问题) Sarsa 与 Q-Learning 的区别
  • 原文地址:https://www.cnblogs.com/yulang314/p/3713471.html
Copyright © 2011-2022 走看看