« アクション起動時の要素選択でのIAdaptableの利用 | トップページ | Pluginクラスの作成 »

2004.06.05

ファイルの作成

ほとんどのソフトウェアが必ずといっていいほど行っている処理として,ファイルの作成があげられる。一番手軽な情報の永続化の方法である。今回は,プラグイン内で,あるプロジェクトまたはフォルダにファイルを作成するための方法を紹介する。

Eclipseでは,ファイルなどのリソースは「ハンドル」と呼ばれる識別子で表される。ハンドルはリソースの実体に関する情報を持つものだが,実体がなくても(あたかも実体があるかのように)作成することができる。ファイルの作成は,作成したいファイルのハンドルを作成し,そのハンドルに対して作成を指示する,という手順になる。

まずはソースコードを紹介しよう。

  IContainer container = ...; // IProjectまたはIFolderオブジェクト

  IFile file = container.getFile(new Path("hoge.txt"));

  String contents = "Hello world!";
  InputStream is = new ByteArrayInputStream(contents.getBytes());

  file.create(is, false, null);

ファイルはプロジェクトまたはフォルダに対して作成される。つまり,まずはプロジェクトを表すIProjectオブジェクトか,フォルダを表すIFolderオブジェクトを何らかの方法で取得する。この2つのインタフェースは,共にIContainerインタフェースを継承している。IContainerインタフェースには,ファイルハンドルを生成するためのgetFileメソッドが規定されているので,それを利用して作成したいファイルのハンドルオブジェクト(IFileオブジェクト)を生成する

getFileメソッドの引数には,ファイルのパスを表すIPathインタフェースのオブジェクトを指定する。EclipseではIPathインタフェースの実装クラスとしてPathクラスを用意してくれているので,Pathクラスのコンストラクタに作成したいファイルのファイル名を渡してインスタンスを生成している。ファイルのパスはcontainerオブジェクトが持つファイルシステム上の場所からの相対パスになる。

IFileオブジェクトによるファイルの作成には,作成するファイルの内容を入力ストリームの形で渡さなければならない。そこで上記のソースコードでは,”Hello world!”という文字列をバイト列に変換し,そのバイト列を元にByteArrayInputStreamオブジェクトを生成してファイルの内容としている。

そしてハンドルの実体,つまりファイルの作成はIFileオブジェクトのcreateメソッドを使って行う。第1引数に先ほど作成しておいた入力ストリームを渡し,第3引数にIProgressMonitorオブジェクトを渡す。第1引数の内容によってはファイルの作成に長時間かかる可能性があるため,進捗表示を行うための機能がcreateメソッドに備わっている。

第2引数だが,これはちょっと難しい。createメソッドの挙動を決定するためのフラグなのだが,基本的に第2引数は作成しようとしたファイルが既に存在したときにどうするか,ということを指定する。このフラグも含めて,createメソッドの挙動をまとめてみる。

  ・「hoge.txt」が存在し,既にプロジェクトに登録されていたとき
    第2引数の値に関係なく,エラー(Resource ... already exists.)が発生。

  ・「HOGE.TXT」が存在し,既にプロジェクトに登録されていたとき
    第2引数の値に関係なく,エラー(A resource exists with a different case: ...)が発生。

  ・「hoge.txt」が存在し,プロジェクトに登録されていないとき
    第2引数がtrueの場合,一旦削除されて新しく作成される
    第2引数がfalseの場合,エラー(A resource already exists on disk ...)が発生。

  ・「HOGE.txt」が存在し,プロジェクトに登録されていないとき
    第2引数の値に関係なく,エラー(A resource exists on disk with a different case: ...)が発生。

  ・「hoge.txt」「HOGE.TXT」が存在しないとき
    第2引数の値に関係なく,新しく作成される

安全性を求めるなら,第2引数はfalseを指定しておくのが無難だろう。以上の処理により,ファイルが作成されてプロジェクトに登録される。

|

« アクション起動時の要素選択でのIAdaptableの利用 | トップページ | Pluginクラスの作成 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12631/715193

この記事へのトラックバック一覧です: ファイルの作成:

« アクション起動時の要素選択でのIAdaptableの利用 | トップページ | Pluginクラスの作成 »