#背景
毎秒更新されるファイルが毎日0時に新しい日付で作成されます。
更新中のファイル以外で最新のファイルを特定したいなーと思ったので
その際のコードを書き残します。
#更新日時を取得する
File.lastModified()で更新日を取得します。
でも、返ってくる値はLong型で数字の羅列なので、識別できるようにSimpleDateFormatを使って
"yyyy/MM/dd HH:mm:ss"
という形式で表示しています。
import java.io.File;
import java.text.SimpleDateFormat;
public class test{
public static void main(String[] args){
String filepath = "C:/tedkuma/BOX/20180729.csv"; //参照するディレクトリ
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//日付時刻の書式定義
File targetFile = new File(filepath);
Long lastModified = targetFile.lastModified(); //更新日時取得するのにlastModified()を使う。
String update_time = simpleDateFormat.format(lastModified); //longで来た値をsimpleDateFormatで整形
System.out.println(update_time);
}
}
#ファイル名を書き出す処理と組み合わせてみる
以前書いた ディレクトリの中身を確認する を使って複数あるファイルの名前と更新日を書き出します。
import java.io.File;
import java.text.SimpleDateFormat;
public class test
{
public static void main(String[] args)
{
String filepath = "C:/tedkuma/BOX/";
File dir = new File(filepath);
File[] list = dir.listFiles(); //listFilesを使用してファイル一覧を取得
for(int i=0; i<list.length; i++) {
String filename = list[i].getName();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//日付時刻の書式定義
File targetFile = new File(filepath+filename);
Long lastModified = targetFile.lastModified();
String update_time = simpleDateFormat.format(lastModified);
System.out.println(update_time+":"+filename);
}
}
}
#時間を計算する
時間を計算するにはCalendarクラスを使います。(import java.util.Calendar;を追加)
Calendar.getInstance()で現在の時間を取得できます。
変数.add(Calendar.DATE, 1);で 1日後の時間、 DATEをMINUTEに変えれば1分後、
第2引数の 1 を -1 に変えることで1日前や1分前という時間を取得することもできます。
更新日を取得したlastModified(long型)から直接Calendar型に変換できないので
どちらにも変換できるDate型を使用しています。(import java.util.Date;を追加)
compareTo()を使用して大小を比較することが出来ます。
A.compareTo(B) という書き方をしたときに
A > B Aが前の時は -1
A < B Aが後の時は 1
A = B 同じ時は 0 が返ります。
#更新済みファイルから更新日が1日以内のファイルを特定する
毎秒更新されている更新中のファイルは取得したくないので
if条件に更新時間は1日以内でかつ、10分以上経過しているものというのを入れました。
import java.io.File;
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;
public class test{
public static void main(String[] args){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String filepath = "C:/tedkuma/BOX/";
File dir = new File(filepath);
File[] list = dir.listFiles();
Calendar st = Calendar.getInstance();//Calendarクラスで現在日時を取得
st.add(Calendar.DATE, -1); //1日前を取得
Date start = st.getTime(); //Dateに直す
Calendar en = Calendar.getInstance();//Calendarクラスで現在日時を取得
en.add(Calendar.MINUTE, -10); //10分前を取得
Date end = en.getTime();
for(int i=0; i<list.length; i++) { //対象のパス内のファイル分処理を実行
String filename = list[i].getName();
File targetFile = new File(filepath+filename);
Long lastModified = targetFile.lastModified();
Date koushin = new Date(lastModified);
if(start.compareTo(koushin)<0 && end.compareTo(koushin)>0){//compareToで比較
String update_time = simpleDateFormat.format(koushin);
System.out.println(update_time+":"+filename);
}
}
}
}