Androidのアプリ開発関連のブログ

Apache Commonsは簡単だった

Javaでのプログラミングはなかなか捗らないが、Apache Commons使ってFTPは結構簡単だった。

FTPClient ftp=new FTPClient();
ftp.connect(host);
ftp.login(user,pass);
こんな感じで接続して、

ftp.changeWorkingDirectory(path);
で作業ディレクトリの変更。

ディレクトリのファイル一覧は、
ftp.listFiles()
でFTPFileの配列が取得できるから、
for(FTPFile f:ftp.listFiles()){

}
こんな感じでループ処理。
FTPFileのメソッドでファイル名やディレクトリかファイルかなどの情報が取得できる。
パーミッションも取得できるが、ログインユーザー名とファイルシステムのユーザー名が同じとは限らないから、パーミッションに関しては実際に読み書きしてみないとわからないね多分。

ファイルの読み込みは、
ftp.setFileType(ftp.BINARY_FILE_TYPE);
でバイナリモードに設定して、
ftp.retrieveFileStream(filename);
でInputStreamが取得できる。
FTPにはサーバーが対応していればアスキーモードが使えるるが、あれは改行コードが勝手に変換されて罠なんで使い道ない。

書き込みはまだやってないが、
ftp.storeFileStream(filename);
でOutputStream取得して書き込めばいいのかな?


FTPに関してはそんな感じなんだが、
InputStreamからBufferedReaderにしてreadLine()で読み込もうと思ってたんだが、
BufferedReader.readLine()って改行コードが含まれないんだね。
ファイルの読み込みはローカルファイルも処理作ったが、そっちもダメだな。

1文字ずつ読み込むか、java.nio.Bufferのサブクラス使ってやろうかなと検討してるところなんだが、
改行コードを取得して保存時に再変換したり、それのついでにUTF-8以外の文字コードに対応させるなら、InputStreamReader使うのがいいのかな?
Javaはほんと似たようなのがいっぱいあって困る・・・


ファイルの保存処理を作ったら、ローカルとFTPのファイル関連処理は終わりかな。
SFTPはganymed-ssh-2を使う予定だが、FTPと同じように作れば問題ないと思ってる。
Apache CommonsにはFTPじゃなくてFTPSClientもあるからFTPSも対応させようと思うが、サンプルコード見たら、
ftp=ftps;
みたいになってたから、
FTPClientとFTPSClientでメソッド等は同じなんだと思う。
初期化部分だけ変えれば同じ処理でできそう。


ネットワーク含めてファイル関連の処理が終わったら、UI系。
HTMLファイルはブラウザモードと、できればDOMインスペクタ的なモードも用意したいと思ってるんで、結構めんどいかも。

テキストハイライトは無い状態でとりあえず完成いいかなと思うんだが、
Google Playで配信されてるテキストエディタでハイライトのあるやつがあるようだが、どうやって実装するんだろ?
普通のEditTextで一部だけ文字色変えたりできるのか?