みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

Unityでテキストファイルを読み書きする

Unityにてテキストファイルを読み書きする方法を紹介します.

以下のBoo スクリプトは,Application.dataPath以下にtest.txtを作成し,Hello World! by StreamWriterと書き込んでファイルを一度閉じた後,それを開いてDebug.Log()にて内容を表示する,というものです.

import UnityEngine
import System
import System.IO

class Test (MonoBehaviour): 
    def test():
        try:
            # FileInfo 
            f as FileInfo = FileInfo(Application.dataPath+"/test.txt")
            Debug.Log(f.ToString())
            # StreamWriter
            sw as StreamWriter = f.CreateText()
            sw.WriteLine("Hello World!");
            sw.WriteLine("by");
            sw.WriteLine("StreamWriter");
            sw.Flush()
            sw.Close()
            # StreamReader
            #f = FileInfo(Application.dataPath+"/null.txt") # エラー
            sr as StreamReader = f.OpenText()
            s as string = ""
            while ((s = sr.ReadLine()) != null) :
                Debug.Log(s);
            sr.Close() 
        except e as FileNotFoundException:
            Debug.LogError("$(f.Name) was not found! "+e)
        except e as IOException:
            Debug.LogError("Error!"+e)

FileInfoにてファイル名を指定します.この時Unityでは実行環境によってパスが異なってくるので,Application.dataPath 以下に保存することで一貫性を持たせます.

StreamWriterのインスタンスはFileInfo.CreateText()から作成することができますので,これにWriteLine()を実行すればファイルに文字列が書き込まれます.StreamWriterはFlush()してからClose()しましょう.

StreamReaderのインスタンスは,FileInfo.OpenText()から作成することができますので,これからReadLine()を実行して,nullが返ってくるまでwhileでループして一行づつ読み込んでいます.StreamReaderもClose()しましょう.

ファイルが存在しないなど,IO処理に例外はつきものなので,try exceptで囲っておきます.ファイルが見つからなければSystem.IO.FileNotFoundException が発生するので,適宜処理します.ちなみに上記のスクリプトの

#f = FileInfo(Application.dataPath+"/null.txt") # エラー

という行の最初の#を削除して実行すると,

null.txt was not found! System.IO.FileNotFoundException: Could not find file "............../Assets/null.txt".
File name: "............../Assets/null.txt"

というエラーが表示されます.

 

参考:FileInfo Class (http://msdn.microsoft.com/).aspx)