按日期分组文件

时间:2015-01-22 05:12:49

标签: java

我想根据修改的月份和年份压缩文件。我能够使用简单的日期格式获得月份和年份。

package codes;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;

public class UsingLoops 
{
private static final String FOLDER_PATH = "C:\\Users\\Desktop\\Zip";

public static void main(String[] args) throws IOException 
{
    File dir = new File(FOLDER_PATH);

    File[] files = dir.listFiles(new FilenameFilter() {

        @Override
        public boolean accept(File directory, String fileName)
        {
            if (fileName.endsWith(".txt"))
            {
                return true;
            }
            return false;
        }
        });

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");

    for(File f:files)
    {
        System.out.println(f.getName());

        String month = sdf.format(f.lastModified());

        int j = Integer.parseInt(month);

        System.out.println(j);
    }
  }
}

现在我想根据月份和年份列出文件。 例如

  

201412
201411等。

如何自动将ZIP的名称作为年份和月份。

帮助我......

我知道如何使用java进行压缩,但我需要根据时间和命名自动化,希望你明白我的观点

1 个答案:

答案 0 :(得分:1)

您可以使用由SortedMap键入的java.util.Date来构建List个已修改特定月/年的文件,例如......

File[] files = ...;

Map<Date, List<File>> mapFiles = new TreeMap<>();

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
for (File file : files) {
    try {
        // This might seem weird, but basically, this will trim
        // off the date (day) and time, making it possible to
        // better match elements which fall within the same month
        // and year...
        // You could use a Calendar here to extract the Year and Month 
        // values, it would mean you're not creating so many short lived
        // objects, but that's up to you
        Date date = sdf.parse(sdf.format(new Date(file.lastModified())));
        List<File> group = mapFiles.get(date);
        if (group == null) {
            group = new ArrayList<>(25);
            mapFiles.put(date, group);
        }
        group.add(file);
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
}

// Now, you can process the groups individually...
for (Date date : mapFiles.keySet()) {
    System.out.println(sdf.format(date));
    for (File file : mapFiles.get(date)) {
        System.out.println("    " + file);
    }
}

你没有&#34;有&#34;要使用SortedMap,您可以使用任何类型的Map,但这样您就可以按照Date键对这些群组进行排序了...不知道是否它重要与否......

如果你愿意的话,你可以进一步按年份分组文件,然后在几个月内建立第二组...

Map<Date, Map<Date, List<File>> mapFiles = ...

您可以使用String作为键,但如果您想控制排序顺序,那么DateInteger会更好