※Fileオブジェクトの作成については「ファイルパスからFileオブジェクトを作成する」および「ファイル選択ダイアログでFileオブジェクトを取得する」を参照してください。

 

ファイルにデータを書き込むにはFileオブジェクトのwrite関数を使います。

var fObj= new File('~/Desktop/test.txt');
fObj.open('w'); //書き込み専用で開く
var res= fObj.write( '書き込みテスト' ); //書き込む内容
if (res) {
    alert('書き込み成功');
} else {
    alert('書き込み失敗');
}
fObj.close();

まず、書き込みたいファイルのFileオブジェクトを作成し、open関数でファイルを開きます。このときopen関数の引数には書き込み専用を表す文字列「w」を渡します。

write関数の引数には書き込みたいデータを文字列として渡し、書き込みに成功するとtrueが返るのでそれを確認します。

書き込みが終わったら、close関数でファイルを閉じます。

 

<より実践的な書き込み操作>

先の例では既存のファイルが存在すれば強制的に上書きされ、存在しなければ新規のファイルが作成されることになります。

しかし、ファイルの書き込みはこのような挙動だけではなく、複数の条件によって挙動を変えたい場面も多々あります。

 

以下の例では、ユーザーにデフォルトの保存場所とファイル名を提示し、その結果をふまえた上で書き込みを実行しています。

var dir= Folder.desktop+'/'; //デフォルトの保存場所
var fileName= 'test'; //デフォルトのファイル名
//ファイル名の重複を事前解決
var fObj, cnt=1, f= true;
do {
    fObj= new File(dir+fileName+'.txt');
    if (fObj.exists==true) {
        //既存のファイルがあればファイル名変更
        fileName= fileName+'-'+cnt;
        cnt++; //カウントアップ
    } else {
        f= false;
    }
} while(f);
//保存先選択ダイアログ表示
fObj= fObj.saveDlg('ファイルの保存');
if (fObj != null) {
    fObj.open('w'); //書き込み専用で開く
    var res= fObj.write( '書き込みテスト' ); //書き込む内容
    fObj.close();
}

 

冒頭であらかじめファイル名の重複を避ける処理をしていますが、ユーザーが保存先選択ダイアログ上で重複するファイル名に変更することもあります。ただし、この点に関してはダイアログ側で重複ファイル名である旨をユーザーに警告し(下画像)、その結果を受け取ることになるので心配はいりません。

このダイアログで「いいえ」を選択すると、再びファイル選択ダイアログに戻ります。「はい」を選択すれば既存ファイルのFileオブジェクトが返ることになりますが、それはユーザーが上書きを望んだということになります。

 

<テキスト以外のデータを書き込む>

 

write関数はテキストデータしか書き出せませんので、たとえばスクリプトの設定などの変数を記録する場合に面倒な処理をしなければなりません。

こういったケースにはeval関数とuneval関数を利用する方法があります。uneval関数は実行命令をテキスト化し、eval関数はその逆にテキスト化された実行命令を復元するものです。この機能を使って変数を記録・復元します。

参照:「設定値」の管理・保存について

 

 

Joomla templates by a4joomla