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コマンドの一覧