この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
テキストファイルを読み込んで書き出したいなと思ったので調べました。
環境
- Xcode 13.2.1
準備
テキストファイルの読み込み用にI love youと記述したLoveLetterというタイトルのテキストファイルを用意しました。
これをプロジェクト内に保存します。
ファイルの読み込み
それではファイルを読み込みましょう
LoveLetter.txt
ファイルにアクセスしてその中身をString
にして取得しています。
guard let fileURL = Bundle.main.url(forResource: "LoveLetter", withExtension: "txt"),
let fileContents = try? String(contentsOf: fileURL, encoding: .utf8) else {
fatalError("読み込み出来ません")
}
print(fileContents)
print
による出力結果はこちらです。
I love you
無事に読み込んだものを出力することが出来ました。
Bundle.main.url
でバンドル内のファイルにアクセスしています。
第一引数には、ファイル名(LoveLetter)、第二引数にはファイルの拡張子名(txt)を渡しています。
Bundle.main
Bundle.main
は、現在実行中のバンドルディレクトリを表します。そのため、アプリの場合、メインバンドルオブジェクトを使用すると、アプリに付属しているリソースにアクセスできます。
ファイルの書き込み
今回はNSHomeDirectory
に書き込みます。
書き込み先のpath
を取得して、そのpath
にあるテキストファイルに任意の文字列を書き込みます。
今回は書き込みに成功すると、成功
と書き込み先のpath
が出力され、失敗すると失敗
と出力されます。
let path = NSHomeDirectory() + "/Documents/LoveLetterForReply.txt"
let text = "書き込みたい内容"
do {
// テキストの書き込みを実行
try text.write(toFile: path, atomically: true, encoding: .utf8)
print("成功\nopen", path)
} catch {
// テストの書き込みに失敗
print("失敗:", error )
}
ファイルの読み込み/書き込み
それでは読み込みと書き込みを一連の流れでやってみましょう。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let contents = readFileContents()
writeTextFile(contents: contents)
}
private func readFileContents() -> String {
guard let fileURL = Bundle.main.url(forResource: "LoveLetter", withExtension: "txt"),
let let fileContents = try? String(contentsOf: fileURL, encoding: .utf8) else {
fatalError("読み込み出来ません")
}
return fileContents
}
private func writeTextFile(contents: String) {
let path = NSHomeDirectory() + "/Documents/LoveLetterForReply.txt"
let text = contents + "\nうそです"
do {
// テキストの書き込みを実行
try text.write(toFile: path, atomically: true, encoding: .utf8)
print("成功\nopen ", path)
} catch {
// テストの書き込みに失敗
print("失敗:", error )
}
}
}
書き込みに成功すると、ログにopen
から始まる出力先への path
が表示されます。
open /Users/userName/Library/Developer/CoreSimulator/Devices/4DMCBDBF-57D7-49B2-88D9-E0D955B1B908/data/Containers/Data/Application/D5AFGE84-3KC7-456E-9172-CF66543130B9/Documents/LoveLetterForReply.txt
このコードをそのままターミナルへ貼り付けて実行するとテキストファイルが開かれます。
この書き込み先のファイルを確認してみましょう
無事にテキストファイルを読み込みして新たにテキストファイルへの書き込みに成功しました。
おわりに
告白には失敗しましたが、気を取り直して前向きに生きていこうと思います。