【问题标题】:Reading from text file in objective-c在objective-c中从文本文件中读取
【发布时间】:2012-08-31 00:37:12
【问题描述】:

我有一个包含多个单词的文本文件。它们都由新行分隔。

我尝试了什么:

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

if (filePath) { // This does trigger, so the file is actually found.

    NSArray *arr = [filePath componentsSeparatedByString:@"\n"]; 

}

我也尝试过:

NSMutableArray * lines = [[NSMutableArray alloc] initWithArray:[filePath componentsSeparatedByString:@"\n"] copyItems: YES];

这些似乎都不起作用,因为我似乎只在使用 NSLog 读出行时才获得文件路径。有谁能帮忙吗?

lines 数组似乎只包含一个对象,即文本文件位置的字符串。

我想要一个数组,其中每个字符串都是由纺织品中的一条线分隔的字符串。

【问题讨论】:

    标签: objective-c ios cocoa-touch


    【解决方案1】:

    首先,您需要在应用程序包中获取该文件。这意味着,您必须将其放在应用程序的“资源”文件夹中。

    那么你可以这样读:

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

    然后将内容加载到NSString 中就更容易了:

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

    然后创建数组:

    NSArray *arr = [content componentsSeparatedByString:@"\n"]; //might also be @"\r" check both.
    

    【讨论】:

    • 您忘记添加按行分隔的部分,但我自己做了。现在完美运行。谢谢!
    • 您能否更正我的答案,以便对其他人也有帮助...谢谢...
    【解决方案2】:

    方法 [NSString componentsSeparatedByString:] 用于字符串本身,在您的情况下是文件路径,而不是此路径中文件的内容。

    有很多方法可以从文件中读取。 Dave DeLong 为这个问题发布了一个聪明的方法。检查它here

    【讨论】:

      【解决方案3】:

      你所做的一切都是在破解文件路径——你还没有从文件中加载任何数据。

      有很多方法可以做到这一点。 [NSData initWithContentsOfURL...可能是一个开始

      【讨论】:

        【解决方案4】:

        NSString *stringFileContent = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"yourfilename" ofType:@"txt"] encoding:NSUTF8StringEncoding error:&error];

        【讨论】:

        【解决方案5】:

        您的错误是您混淆了路径 - 一个字符串仅告诉您文件系统中的文件在哪里(在这种情况下,在您的应用程序包中的某个位置)和实际文件 - 及其内容不同东西。

        您没有将文件的 CONTENTS 分成几行,而是破坏了指向该文件的 PATH。

        所以,一个更好的实现应该像你的那样开始:

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

        但继续将文件内容读入单个字符串:

        NSString *fileContents = [NSString stringWithContentsOfFile:filePath];
            
        

        然后才尝试使用所有官方换行符将文件内容分成单独的字符串,每个字符串包含一行文本。

        NSArray *textLines = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
        

        当然最好在每个阶段检查之前的阶段是否成功。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-11
          • 1970-01-01
          • 1970-01-01
          • 2020-02-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多