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());
}
答案 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.file
。 File
已被彻底破坏(请注意.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预先创建到所有拉链,然后直接将文件复制到它们中,根本不需要通过中间地图。