How to read/write file with iOS, in simulator as well as on device?

后端 未结 4 375
独厮守ぢ
独厮守ぢ 2020-12-16 02:45

As I need to read a file when my app is launched and write it sometimes while using it, I tried to reach it with :

NSString *dataFile = [[NSBundle mainBundle         


        
相关标签:
4条回答
  • 2020-12-16 02:51
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @property (strong, nonatomic) IBOutlet UITextView *txtWriteText;
    @property (strong, nonatomic) IBOutlet UIButton *btnWriteFile;
    @property (strong, nonatomic) IBOutlet UIButton *btnReadFile;
    @property (strong, nonatomic) IBOutlet UILabel *lblReadText;
    
    - (IBAction)btnWriteFileTouched:(id)sender;
    - (IBAction)btnReadFileTouched:(id)sender;
    
    @property NSFileManager *filemgr;
    @property NSString *docsDir;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        _filemgr =[NSFileManager defaultManager];
        NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
        _docsDir = dirPaths[0];
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
    }
    
    - (IBAction)btnWriteFileTouched:(id)sender {
        NSString *filePath = [_docsDir stringByAppendingPathComponent: @"texfile.txt"];
        NSData *databuffer = [@"PREFIX: " dataUsingEncoding: NSASCIIStringEncoding];
        [_filemgr createFileAtPath: filePath contents: databuffer attributes:nil];
    
        NSFileHandle *file = [NSFileHandle fileHandleForWritingAtPath:                                filePath];
        if (file == nil){
            NSLog(@"Failed to open file");
            return;
        }
    
        NSMutableData *data = [NSMutableData dataWithData:[_txtWriteText.text dataUsingEncoding:NSASCIIStringEncoding]];
    
        [file seekToEndOfFile];
        [file writeData: data];
        [file closeFile];
    }
    
    - (IBAction)btnReadFileTouched:(id)sender {
        NSString *filePath = [_docsDir stringByAppendingPathComponent: @"texfile.txt"];
        NSData *databuffer;
        NSFileHandle *file = [NSFileHandle fileHandleForReadingAtPath: filePath];
        if (file == nil){
            NSLog(@"Failed to open file");
            return;
        }
    
        databuffer = [file readDataToEndOfFile];
        [file closeFile];
    
        NSString *datastring = [[NSString alloc] initWithData: databuffer encoding:NSASCIIStringEncoding];
        _lblReadText.text = datastring;
    }
    
    @end
    
    0 讨论(0)
  • 2020-12-16 02:54

    For write files the methods are -[NSData writeToURL:atomically:] and -[NSString writeToURL:atomically:encoding:error:] can be used if you link to the Foundation framework.

    For reading files the methods are -[NSData initWithContentsOfURL:options:error:] and -[NSString initWithContentsOfURL:encoding:error:].

    0 讨论(0)
  • 2020-12-16 02:56

    Here is what you need to write and read a file text:

    Write a file:

    -(void) writeStringToFile:(NSString *)aString{
        NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSString *fileName = @"textFile.txt";
        NSString *fileAtPath = [filePath stringByAppendingString:fileName];
        if (![[NSFileManager defaultManager] fileExistsAtPath:fileAtPath]) {
            [[NSFileManager defaultManager] createFileAtPath:fileAtPath contents:nil attributes:nil];
        }
        [[aString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:fileAtPath atomically:NO];
    }
    

    and read a file:

    -(NSString *)readStringFromFile{
        NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSString *fileName = @"textFile.txt";
        NSString *fileAtPath = [filePath stringByAppendingString:fileName];
        return [[NSString alloc] initWithData:[NSData dataWithContentsOfFile:fileAtPath] encoding:NSUTF8StringEncoding];
    }
    

    and finally I test my code at viewDidLoad:

        NSString *text = @"I'm an iOS developer and I'm living at HCM city";
        [self writeStringToFile:text];
        NSString *strResult = [self readStringFromFile];
        NSLog(@"%@", strResult);
    
    0 讨论(0)
  • 2020-12-16 03:03

    To read the file from the bundle do the following

    NSString *dataFile = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"txt"];
    

    To read it from your sandbox storage (documents)

    NSString *docPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/YourFile.txt"];
    NSString *dataFile = [NSString stringWithContentsOfFile:docPath 
                                               usedEncoding:NSUTF8StringEncoding 
                                                      error:NULL];
    

    To write to document folder

    NSString *docPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/YourFile.txt"];
    [dataFile writeToFile:docPath 
              atomically:YES 
                encoding:NSUTF8StringEncoding 
                   error:NULL];
    

    Please note you will not be able to write the file in the bundle folder of your application

    0 讨论(0)
提交回复
热议问题