2005年10月20日

Jakarta-Commons VFS

現在JavaでExplorerクローン作成している。
すでに最初の開発バージョンで俺が最初に必要としていた「Linux上でのファイル一覧の閲覧とダブルクリックでMP3の再生」は実現できていたがもっと高機能なファイラにしてSourceforgeあたりでオープンソースプロジェクトとして公開しようかと思う。

で、JakartaプロジェクトのCommonsでいろんなファイルシステムを抽象化するライブラリ VFSを使ってみると面白そうなので使ってみる。
コレを使うとローカルファイルシステムもHTTPもFTPも圧縮ファイルもWebDAVも同じように使える。
つまりExplorerのCドライブやDドライブなどの隣にFTPのホストが同じように表示され同じようにファイルのコピペなどが行うことができるわけだ。
圧縮ファイルは中身のファイルの読み込みだけらしい。

また、Java標準のファイルを扱うオブジェクトはファイルの移動や、ディレクトリの削除が非常に面倒だった。
が、このライブラリではそのあたりが解消されていて別のディスクに移動や、FTP上に移動なども簡単に行える。

ただディレクトリを"移動"すると移動先に同じ名前のディレクトリがあった場合、上書きせずに削除してから移動になるようだ。
このあたりは不便そう。自分で実装する必要がありそうだ。

FTPの接続がうまくいかなかったのでパッシブモードで接続する方法を以下に。
設定方法がわからなかったのでソース読んで解決。ドキュメント少なめでソース読むの必須かも。
単にドキュメント探し切れてないだけかもしれないけど。
以下のコードを実行するだけでローカルのtestディレクトリとその中のファイルをアップロードすることができる。簡単!


FileSystemManager fsManager = VFS.getManager();
String copyDir = "test";
FileObject file1 = fsManager.resolveFile("file:///c:/" + copyDir);
FileSystemOptions opt = new FileSystemOptions();
FtpFileSystemConfigBuilder cb = FtpFileSystemConfigBuilder.getInstance();

// パッシブモードON
cb.setPassiveMode( opt , true );

FileObject file2 = fsManager.resolveFile("ftp://USER:PASSWORD@HOST/DIR/"+ copyDir , opt );

file2.copyFrom( file1 , new FileSelector(){
public boolean includeFile(FileSelectInfo arg0) throws Exception {
return true;
}
public boolean traverseDescendents(FileSelectInfo arg0) throws Exception {
return true;
}
});

Trackback on "Jakarta-Commons VFS"

このエントリーのトラックバックURL: 

"Jakarta-Commons VFS"へのトラックバックはまだありません。

Comment on "Jakarta-Commons VFS"

"Jakarta-Commons VFS"へのコメントはまだありません。

Post a Comment

コメントする

コメント登録機能が設定されていますが、TypeKey トークンが設定されていません。