javaでapache.commonsのFTPClientを使ってFTPしているときの話。
リモートのディレクトリ内のファイル更新日時を取得しようとして、FTPClient.listFiles()
メソッドを使うと秒が0で取得されてしまう。
これはlistFiles()
メソッドがLIST
コマンドを使用していることに起因しているそうで。FTPサーバはUNIXのLS
コマンドと同様のリストを返すことがあり、その際に更新日時の精度が欠落してしまうということのようです。
そこで常に秒までの精度で更新日時を返すMLSD
コマンドを用いる、mlistDir()
メソッドを使用する。(もちろんFTPサーバでMLSD
コマンドをサポートしている必要がある)
mlistDir()
メソッドは、commons-net-3.0以降から使えるようだ。
FTPサーバがMLSD
やMLST
をサポートしていない場合は、ファイル名を取得した後、個別に.getModificationTime(name)
メソッドで更新日時を取得することになる。おそらく。GMTで取得されるので変換が必要。
参考
- FTPClient.listFiles is not returning time in seconds
https://stackoverflow.com/questions/29300686/ftpclient-listfiles-is-not-returning-time-in-seconds - FTPコマンドの一覧
https://ja.wikipedia.org/wiki/FTPコマンドの一覧