基于修改时间在java中压缩文件

时间:2015-01-20 06:06:59

标签: java

package codes;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.security.acl.LastOwnerException;
import java.text.SimpleDateFormat;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ModifyAndDelete 
{
private static final String FOLDER_PATH = "C:\\Users\\s13w63\\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(".INC")) 
            {
                return true;
            }
            return false;
        }
    });

    SimpleDateFormat sdf = new SimpleDateFormat("MM");

    for(File f:files)
    {
        String month=sdf.format(f.lastModified());

        final int lastModifiedMonth=Integer.parseInt(month);        
    }       

    }       
}

这是获取最后修改它的文件的月份。现在我想根据月份将文件放入列表中。如何根据月份获取文件,我需要每个月的列表。请帮帮我......

我使用下面的代码使用hashmap添加和迭代,但它每个月只列出一个文件。

Map<Integer, List<File>> map = new HashMap<Integer, List<File>>();

    for (File f : files) {
        String month = sdf.format(f.lastModified());

        final int lastModifiedMonth = Integer.parseInt(month);

        map.put(lastModifiedMonth, new ArrayList<File>());

        map.get(lastModifiedMonth).add(f);
    }

    for (Entry<Integer, List<File>> entry : map.entrySet()) 
    {
        System.out.println(entry.getKey() + "/" + entry.getValue());
    }

2 个答案:

答案 0 :(得分:0)

类似的东西:

Map<Integer, List<File>> map = new HashMap<>();
for(File f:files)
{
    String month=sdf.format(f.lastModified());
    final int lastModifiedMonth=Integer.parseInt(month);        
    if (!map.containsKey(lastModifiedMonth)) {
        map.put(lastModifiedMonth, new ArrayList<>());
    }
    map.get(lastModifiedMonth).add(f);
}       
// use map

(在此输入,因此可能无法编译)

答案 1 :(得分:0)

由于您使用的是Java 7,至少use java.nio.fileFile已被彻底破坏(请注意.listFiles() can return null,您甚至不会检查此内容。)

按月分类很容易......代码:

final Map<Integer, List<Path>> filesByMonths = new HashMap<>();

final Calendar cal = new Calendar();

final Path dir = Paths.get(FOLDER_PATH);

final DirectoryStream<Path> dirStream 
    = Files.newDirectoryStream(dir, "*.INC");

List<Path> list;
int month;

for (final Path entry: dir) {
    cal.setTimeInMillis(Files.getLastModifiedTime(entry).toMillis());
    month = cal.get(Calendar.MONTH);
    list = filesByMonth.get(month);
    if (list == null)
        filesByMonth.put(month, list = new ArrayList<>());
    list.add(entry);
}

如果您想按月迭代,您可能还想使用TreeMap代替HashMap

至于创建拉链,你没有告诉,但是在Java 7中你可以将zip作为FileSystem来操作(参见我上面发布的链接,它提供了一个例子)。事实上,你可以通过将所有FileSystems预先创建到所有拉链,然后直接将文件复制到它们中,根本不需要通过中间地图。