从文本文件读取和写入字符串


在 Swift 中,您可以使用 String 类的 String(contentsOfFile:) 和 write(toFile:atomically:encoding:) 方法从文本文件读取和写入字符串。您将看到一些 Swift 中文件读取和写入的示例。

String(contentsOfFile:)

String 类提供了一个从文件内容创建字符串的类方法。此方法是一个初始化程序,必须提供文件路径。例如,您可以通过将路径传递给主包来读取本地文件的内容。此过程将返回一个包含文件内容的新字符串。

请记住,如果内容或路径无效或出于任何其他原因,此方法可能会返回 nil。可以使用 try-catch 块来处理这种情况。

write(toFile:atomically:encoding:)

在此方法中,String 类的实例将字符串的内容写入文件。该方法采用三个参数:

toFile − 要将字符串写入的文件的路径。

atomically − 一个布尔值,确定是否应以原子方式写入文件。如果设置为 true,则将文件写入临时位置,然后将其重命名为最终位置。这可以帮助防止在写入操作期间发生故障时数据丢失。

encoding − 将字符串写入文件时使用的编码。默认值为 .utf8。

以下是有关如何从文本文件读取字符串的示例

请注意,在开始读取文件之前。这里,我们在 Xcode 项目中添加了一个名为“example.txt”的文件。我们将读取同一个文件。在该文本文件中,我们添加了以下字符串内容:

Lorem Ipsum 仅仅是印刷和排版行业的虚拟文本。

自从 1500 年代,当一位不知名的印刷工取走了一版印刷样张,并将其重新排列以制作一本印刷样张书籍时,Lorem Ipsum 就一直是该行业的标准虚拟文本。

示例

将从 example.txt 文件中读取相同的字符串内容。

func readString() {
   do {
      // creating a path from the main bundle
      if let bundlePath = Bundle.main.path(forResource: "example.txt", ofType: nil) {
         let stringContent = try String(contentsOfFile: bundlePath)
         print("Content string starts from here-----")
         print(stringContent)
         print("End at here-----")
      }
   } catch {
      print(error)
   }
}

输出

Content string starts from here-----
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
End at here-----

以下是如何将字符串写入文本文件的示例

要将字符串内容写入文件,我们将使用上面示例中使用的相同文件。

示例

func writeString() {
   do {
      // creating path from main bundle
      if let bundlePath = Bundle.main.path(forResource: "example.txt", ofType: nil) {
            
         let stringToWrite = "This is a string to write to a file."
         try? stringToWrite.write(toFile: bundlePath, atomically: true, encoding: .utf8)
            
         let stringContent = try String(contentsOfFile: bundlePath)
         print("Content string starts from here-----")
         print(stringContent)
         print("End at here-----")
      }
   } catch {
      print(error)
   }
}

输出

Content string starts from here-----
This is a string to write to a file.
End at here-----

请注意,bundlePath 变量是包中文件的路径。如果文件不在包中,您也可以使用自定义路径。

请记住,contentsOfFile: 和 write(toFile:atomically:encoding:) 方法可能会抛出错误,因此建议使用 try? 或 try! 关键字或 do-catch 语句来处理它们。

结论

上述方法用于将文件的内容读取到字符串中,然后将字符串写入文件。

您应该注意,当您处理文件时,需要处理错误。这是因为在读取或写入文件时,出现错误的可能性更大。您可以提供自定义路径或包中的路径。此外,您可以使用 FileManager 提供文件系统的路径。

更新于: 2023 年 2 月 28 日

2K+ 阅读量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告