InDesign CS の JavaScript で外部ファイル操作(その1)

自分のためのまとめ。CS限定。たぶん後のバージョンでもある程度通用するとは思うけど。

  • ファイルオブジェクトを生成する
  • 新規ファイルを作成する
  • ファイルの読み書き
  • 特殊なフォルダやファイルの取得

ファイルオブジェクトを生成する

var path = "e:/folder/file1.txt"; // 開きたいファイルのパス
var fileObj = File(path); // new File(path)でもOK

これでFileオブジェクトを作れる。

新規ファイルを作成するとき(&新規フォルダを作成するとき)

ファイルを開くとき、pathに存在しないファイル名を指定するとファイルを作ることもできる。
ただし、フォルダは作れないので先に作成しておく必要がある。

// Folderオブジェクトのcreateメソッドでフォルダを作成
var folderPath = "e:/folder/"
var success = Folder(folderPath).create(); // 成功すればsuccessはtrueを返す

// 新規ファイルを作成
var path = folderPath + "file1.txt"; // 作成したいファイルのパス
var fileObj = File(path);

これで新規ファイルを作れる。
作ったファイルは一度openメソッド(書き込み可モード)で開かないと保存されない。openメソッドについては後ほど。

ちなみに、createメソッドはファイル作成が成功したかどうかの真偽値を返すだけなので(Folderオブジェクトじゃない)、作成したフォルダをどうにかしたいときは

var folderPath = "e:/folder/"
var success = Folder(folderPath).create();
var folderObj = Folder(folderPath); // new Folder(folderPath)でもOK

改めてFolderオブジェクトを作る必要がある。

ファイルの中身を読み書きするとき(open/close)

fileオブジェクトを作ったら、そのファイルを読み書きできる。

var path = "e:/folder/file1.txt";
var fileObj = File(path);

var mode = "w"; // w:書き込みモード r:読み込みモード e:編集モード
var success = fileObj.open(mode); // 成功すればsuccessはtrueを返す

fileObj.writeln("いちぎょうかきこみ"); // writelnメソッドで1行ぶん書き込む

fileObj.close();

writelnメソッドは1行ずつ書き込み。普通に書き込むときはwriteメソッド。

たとえばテキストファイルを一行ずつ全部読みたいとき

Fileオブジェクトの中身を最後まで読み込む(current positionがファイルの最後まで来る)と、Fileオブジェクトのプロパティeofがtrueになる。ので、

var fileObj = File("e:/folder/file1.txt");
var lineArr = new Array();

fileObj.open("r"); // 読み込みモード

while(!fileObj.eof) {
  lineArr.push(fileObj.readln());
}

fileObj.close();

これでlineArrにファイルの内容が一行ずつ最後まで格納される。

特殊なフォルダのオブジェクトを作成するとき

環境によって場所が違うフォルダは、Folderオブジェクトのプロパティから取得することができる。

var currentFolder = Folder.current; // カレントフォルダ
var startupFolder = Folder.startup; // アプリケーションの実行イメージがあるフォルダ
var systemFolder  = Folder.system;  // OSのシステムフォルダ
var tempFolder    = Folder.temp;    // 一時ファイル置き場のフォルダ
var trashFolder   = Folder.trash;   // ごみ箱フォルダ

CS2以降だともう少し種類があるみたいなんだけどね……(´;ω;)

その他使いそうなファイルやフォルダのオブジェクトを作成するとき

パスを取得してからFolder/Fileオブジェクトを生成する。

// アクティブなドキュメントのファイル
var actDocFile = File(app.activeDocument.fullName);
// アクティブなドキュメントの入っているフォルダ
var actDocFolder = Folder(app.activeDocument.filePath);

// 実行中のスクリプトファイル
var actScriptFile = File(app.activeScript); // activeScriptはパス+ファイル名(string)
// 実行中のスクリプトの入っているフォルダ
var actScriptFolder = Folder(File(app.activeScript).path);

つづく

次はFileオブジェクトとFolderオブジェクトのプロパティ/メソッド、ファイルやフォルダの一覧取得、ファイル選択ダイアログ……あたりをまとめたいつもり。