2009-09-29 8 views
59

Ich bin neu in iPhone Programmierunglesen Text-Datei mit Programmatically Objective-C

Ich möchte den Inhalt der Textdatei lesen, die in meinem Resourse Ordner ist. Ich habe viel gegoogelt, aber ich habe keinen richtigen Weg gefunden, diese Aufgabe zu erledigen.

Bitte vorschlagen

Antwort

136

die Dateien in Ihrem " Der Ressourcenordner "" ist eigentlich der Inhalt Ihres Anwendungspakets. Zuerst müssen Sie den Pfad der Datei in Ihrem Anwendungspaket ermitteln.

NSString* path = [[NSBundle mainBundle] pathForResource:@"filename" 
               ofType:@"txt"]; 

Dann wird der Inhalt in einen NSString Laden ist noch einfacher.

NSString* content = [NSString stringWithContentsOfFile:path 
               encoding:NSUTF8StringEncoding 
               error:NULL]; 

Als Bonus können Sie verschiedene lokalisierte Versionen von filename.txt haben und dieser Code wird die Datei der aktuell ausgewählten Sprache richtig holen.

+0

Die Codierung funktioniert nicht für alle Dateien. Wenn Sie eine Textdatei in Windows erstellen, die ein Eurosymbol mit ANSI-Codierung enthält, wird das Euro-Symbol unter Verwendung des obigen Codes in ein anderes Symbol umgewandelt. Gibt es eine generische Möglichkeit, den gesamten Zeichensatz mit Einzelcodierung zu unterstützen? –

8

Das erste, was Sie tun möchten, ist es, den Weg für die Textdatei, die Sie lesen möchten, erhalten. Da es sich in Ihrem Ressourcen-Ordner befindet, gehe ich davon aus, dass Sie es in das Hauptpaket der Anwendung kopieren. Sie können pathForResource:ofType:

NSBundle *mainBundle = [NSBundle mainBundle]; 
NSString *filePath = [mainBundle pathForResource:@"filename" ofType:@"txt"];

der den Pfad für eine Datei in Ihrem Hauptbündel mit NSBundle bekommen Dann können Sie die Datei auf diesem Weg in ein NSString lesen direkt mit initWithContentsOfFile:usedEncoding:error:

NSStringEncoding encoding; 
NSError *error; 
NSString *fileContents = [[[NSString alloc] initWithContentsOfFile:filePath 
                 usedEncoding:&encoding 
                  error:&error] 
          autorelease];