libgdxのFileHandleでファイル操作(実機で動かしてつまったとこ。

ここ数日は、操作感を実機でためしてみたかったので作ったアプリを実機(android)で動かすことをしてみています。

今まではdesktop上でしか動かしていませんでしたが、androidで動かすためもあって、

gdx-setup.jar でプロジェクト構成を作りなおし → 今まで作ったものをのせかえ

をやったわけなんだけど、ファイルの読み込みに引っかかったのでメモ。

まずおきた問題

File f = new File(FILENAME);

このFileクラスは java.io.File です。

desktopで動かしていた(eclipse上 and javaコマンドで実行)場合は動いていましたが、これがandroidで動かすと FileNotFound になった。

desktopではカレントディレクトリはプロジェクトのあるフォルダだったのですが、androidだと違ったみたいです。

http://snoopopo.hatenablog.com/entry/2015/04/29/112310 の出力結果が、 / って出たのでroot???)

ただ機種によって違うとかもあったらやだので、あまりカレントディレクトリがどこか?を自分が意識したくないと思いました。

そこで、Libgdxの com.badlogic.gdx.files.FileHandle クラスです。

画像ファイルなどの置き場所

android開発をまったくしたことないのでよくわからないですが(>_<)、

android/assets/ 配下に、画像ファイルなどの資材をおいておくと都合がよかったです。なのでそこにおくことにした。

libgdxのFileHandleでファイル操作

https://github.com/libgdx/libgdx/wiki/File-handling にあるとおり、

Gdx.files.internal(FILENAME);

でとることが出来ます。

ここのFILENAMEは、 android/assets の下からのファイル名、またはフォルダ名を指定することが出来ました。

今までjava.io.Fileでファイルとって、InputStreamReaderで1文字ずつ読み込んで〜 みたいなことをしていたのですが、

FileHandle file = Gdx.files.internal(FILENAME);
Reader reader = file.reader();

while(render.read() != -1) { /* shori... */ }

みたいに、FileHandle#reader()でReaderクラス(中身はFileInputStream)をとることも出来ます。

desktop(たぶんhtmlとかで動かすときも)で動かすときは

android/assets/ の配下に画像ファイルをおいてしまったので、

desktop上で動かすときはパスを通してあげる必要がありましたー(メモ