◆PROCESSING 逆引きリファレンス
カテゴリー:スマホ(AndroidMode)
文字列データを読み込むには(AndroidMode編)
【概要】
PROCESSINGにAndroidMode を導入する事で、PROCESSINGで開発したプログラムをAndroid端末上で動かす事ができるようになります。
AndroidModeの導入については「PROCESSINGをAndroid端末で動かすには(4.0版)」記事を参照してください。
アプリケーションでは、なんらかのデータを端末内に保存しておきたい場面が良くあります。
Androidで情報をファイルに保存するにはプリファレンスを使うのが便利ですが、PROCESSINGには手軽にテキスト情報を保存できる saveStrings 命令があります。
また saveStrings 命令で保存したテキストファイルは、対となる loadStrings 命令で簡単に読み取ることが可能です。
読み取ることができるファイルは、UTF-8で書き込まれたテキストファイルに限定されますが、プリファレンスよりも手軽に扱うことができます。
【詳細】
文字列を読み込む
文字列を読み込むString data[] = loadStrings( String fileName ) ;
fileName : ファイル名
data : 読み込んだ文字列配列
指定したファイルの1行が data 配列の1要素に格納されます。これは Javaモードの loadStrings 命令と同じです。
ファイルは
/data/data/パッケージ名/files
(例:/data/data/com.example.mslabo.processingsample1/files)
配下にあるものとして処理されます。
上記パスはアプリケーションの固有領域になりますので、他のアプリケーションからは読み取ることができないファイルです。
fileName にパスを与える場合は、読み込み権限の有るパスを与えて下さい。
不正なパスを与えると指定したファイルが読み取れないか、「java.lang.IllegalArgumentException: File xxxxxx contains a path separator」(xxxxは与えたファイルパス)例外になります。
/data/data/パッケージ名/files 配下のサブフォルダにあるファイルを読み込みたい場合は、sketchPath( String path ) 命令を利用してパスを指定するのが便利です。
【関連記事】
サンプルプログラム
読み込む例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import processing.core.PApplet; import processing.event.TouchEvent; /** * PROCESSING AndroidMode loadStrings Sample * @author MSLABO * @version 1.0 */ public class Sketch extends PApplet { final String SAVE_FILENAME = "MySaveFile.txt"; final int FONT_SIZE = 24; String loadData[] = null; @Override public void settings() { fullScreen(); } @Override public void setup() { String saveData[] = new String[4]; saveData[0] = "たこ"; saveData[1] = "いか"; saveData[2] = "えび"; saveData[3] = "いるか"; //data/data/パッケージ名/files/MyFolder/SAVE_FILENAME //にデータ保存 String filePath = sketchPath("MyFolder") + "/" + SAVE_FILENAME; saveStrings( filePath, saveData ); //文字表示設定 textSize(FONT_SIZE * displayDensity); textAlign(LEFT, TOP); fill(0); } @Override public void draw() { background(200); //読み込んだデータを画面に表示する if( loadData != null ){ String dispMoji = ""; for (String moji : loadData ) { dispMoji = dispMoji + moji + "\n"; } text( dispMoji, 0, 0 ); } } /** * タッチスタートイベント * @param touchEvent */ @Override public void touchStarted(TouchEvent touchEvent) { //data/data/パッケージ名/files/MyFolder/SAVE_FILENAME //からデータ読み込み loadData = loadStrings( sketchPath("MyFolder" ) + "/" + SAVE_FILENAME ); super.touchStarted(touchEvent); } } |
アプリケーションの初期化時に保存したデータを、画面にタッチされた時に loadData に読み込んでいます。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。