1

私はまだJavaに非常に慣れていないので、作成された日付にちなんで名付けられた何千ものファイルで満たされたフォルダーをチェックする必要がある小さなプログラムを作成していYYYYMMDDます(例20130228)。 、それらを新しいディレクトリに移動します。現時点では、私のコードはフォルダーをスキャンしてファイル名のリストを表示できます。複数のファイルがあることがわかった場合は、それらを移動する必要のあるフォルダーが作成されますが、実際にはどのようにすればよいでしょうか。ファイル名を確認し、7日以上経過している場合は移動しますか?

これが私がこれまでに持っているものです:

public static void main(String[] args) {
    Date date = new Date();
    SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-DD");

    // Gets a list of files in specified folder
    File folder = new File("C:/Users/workspace/Test");
    File[] listOfFiles = folder.listFiles();
    for (File file : listOfFiles) {
        if (file.isFile()) {
            System.out.println(file.getName());
        }
    }

    // Creates a temp folder with the date if files are in the specified folder
    File file = new File("C:/Users/workspace/Test");
    if (file.isDirectory()) {
        String[] files = file.list();
        if (files.length > 0) {
            File dir = new File("Temp " + (dateFormat.format(date)));
        dir.mkdir();
        }
    }
}
4

5 に答える 5

1
class OldFileFilter extends FileFilter {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    public boolean accept(File f) {
        Date date = dateFormat.parse(f.getName());
        return System.currentTimeMillis() - date.getTime() > 7 * 24 * 3600 * 1000;
    }

    public String getDescription() {
        return "Filter old files";
    }
}

File[] files = dir.listFiles(new OldFileFilter());
//Then move...

Java 7 の nio については、Java 7 でFile.listFiles(FileFilter フィルター) を nio に置き換える方法を確認してください。

于 2013-02-28T10:20:18.280 に答える
0

2つの解決策が考えられる

1- ファイルの最終変更日を取得するには、File クラスの lastModified() メソッドを使用できます。このメソッドは long 値を返します。この値を取得したら、java.util.Date クラスのインスタンスを作成し、この値をパラメーターとして渡すことができます。この日付には、ファイルの最終変更日が保持されます。

すべてのファイルを取得し、各ファイルの lastModified 日付を要求した日付と比較できます。

2-

public static void deleteFilesOlderThanNdays(int daysBack, String dirWay, org.apache.commons.logging.Log log) {

    File directory = new File(dirWay);
    if(directory.exists()){

        File[] listFiles = directory.listFiles();            
        long purgeTime = System.currentTimeMillis() - (daysBack * 24 * 60 * 60 * 1000);
        for(File listFile : listFiles) {
            if(listFile.lastModified() < purgeTime) {
                if(!listFile.delete()) {
                    System.err.println("Unable to delete file: " + listFile);
                }
            }
        }
    } else {
        log.warn("Files were not deleted, directory " + dirWay + " does'nt exist!");
    }
}

ここで削除するのではなく、これらのファイルを目的のフォルダーに移動する必要があります。

于 2013-02-28T10:11:39.687 に答える
0

ファイル名を解析し、現在と日付の差が 7 日を超えているかどうかを確認します

Date date = dateFormat.parse(file.getName());
if (System.currentTimeMillis() - date.getTime() > 7 * 24 * 3600 * 1000) {
    // older than 7 days
}
于 2013-02-28T10:16:20.673 に答える
0

これを行うには、ファイルの名前を現在の日付と比較します。

          SimpleDateFormat formatter;
          formatter = new SimpleDateFormat("yyyyMMdd");
          Date d = null;
          try {
            d = formatter.parse(filename);//filename of the file
        } catch (ParseException e) {
            e.printStackTrace();
        }

     Date newDate = new Date();
    if (newDate.getTime() - d.getTime() > 7 * 24 * 3600 * 1000) {
        //Whatever You want to do
    }
于 2013-02-28T10:19:00.303 に答える