Как читать/записывать файлы с iOS, в симуляторе, а также на устройстве?
Поскольку мне нужно прочитать файл при запуске моего приложения и иногда его писать при его использовании, я попытался связаться с ним:
NSString *dataFile = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"txt"];
NSLog(@"%@",dataFile);
И файл, который должен находиться в моей папке проекта, находится в папке симулятора:
2012-06-13 17: 36: 56.398 MyFileApp [610: 15203]/Пользователи/Rob/Library/Поддержка приложений /iPhone Simulator/5.1/Приложения/1FFD4436-DCCA-4280-9E47-F6474BEE0183/MyFileApp.app/myfile.txt
Итак, если я хочу читать/записывать его с использованием симулятора, а также реального устройства, что мне делать?
Спасибо за ваши советы
Ответы
Ответ 1
Чтобы прочитать файл из пакета, сделайте следующее
NSString *dataFile = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"txt"];
Чтобы прочитать его из хранилища песочницы (документов)
NSString *docPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/YourFile.txt"];
NSString *dataFile = [NSString stringWithContentsOfFile:docPath
usedEncoding:NSUTF8StringEncoding
error:NULL];
Чтобы записать в папку документа
NSString *docPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/YourFile.txt"];
[dataFile writeToFile:docPath
atomically:YES
encoding:NSUTF8StringEncoding
error:NULL];
Обратите внимание, что вы не сможете записать файл в папке пакета вашего приложения
Ответ 2
Вот что вам нужно написать и прочитать текст файла:
Записать файл:
-(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];
}
и прочитайте файл:
-(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];
}
и, наконец, я проверяю свой код на viewDidLoad
:
NSString *text = @"I'm an iOS developer and I'm living at HCM city";
[self writeStringToFile:text];
NSString *strResult = [self readStringFromFile];
NSLog(@"%@", strResult);
Ответ 3
Для файлов записи методы -[NSData writeToURL:atomically:]
и -[NSString writeToURL:atomically:encoding:error:]
могут использоваться, если вы ссылаетесь на фреймворк Foundation.
Для чтения файлов методы -[NSData initWithContentsOfURL:options:error:]
и -[NSString initWithContentsOfURL:encoding:error:]
.
Ответ 4
#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