如何根据Java中修改的日期对文件进行排序并复制到相应的文件夹

如何根据Java中修改的日期对文件进行排序并复制到相应的文件夹,java,file,sorting,Java,File,Sorting,如修改日期为1999年12月31日,则应将其复制到1999->12->31 我将文件保存在一个集合中,并在每个元素和内部循环上循环以创建一个路径帮助我复制文件 我将月日和日期保存在单独的集合中 和嵌套循环,以基于日、月和年创建文件 File [] files = dir.listFiles(); //im listing files here LinkedHashSet<Integer> yyyy =new LinkedHashSet<Integer>(); Lin

如修改日期为1999年12月31日,则应将其复制到1999->12->31

我将文件保存在一个集合中,并在每个元素和内部循环上循环以创建一个路径帮助我复制文件

我将月日和日期保存在单独的集合中 和嵌套循环,以基于日、月和年创建文件

File [] files = dir.listFiles(); //im listing files here

 LinkedHashSet<Integer> yyyy =new LinkedHashSet<Integer>();
 LinkedHashSet<Integer> mm =new LinkedHashSet<Integer>();
 LinkedHashSet<Integer> dd =new LinkedHashSet<Integer>();
 LinkedHashSet<Long> date =new LinkedHashSet<Long>();
 Calendar c = Calendar.getInstance();

 for(File sl:files)
 {
     c = Calendar.getInstance(); 
     c.setTimeInMillis(sl.lastModified());

    int year= c.get(Calendar.YEAR);
    int day= c.get(Calendar.DATE);
    int month= c.get(Calendar.MONTH);

    //System.out.println(year);
    //System.out.println(day);
    //System.out.println(mm);
    //System.out.println(day+"/"+month+"/"+year);
    yyyy.add(year);
    mm.add(month);
    dd.add(day);

for(int i:yyyy)
{
    new File(dest+"/"+i).mkdirs();
    for(int j:mm)
    {
        if(i==year&&j==month)
        {
        new File(dest+"/"+i+"/"+j).mkdirs();
        }

        for(int k:dd)
        {
            if(i==year&&j==month&&k==day)
            {
                new File(dest+"/"+i+"/"+j+"/"+k).mkdirs();//creating folders here

            }
        }
    }
}
 }
File[]files=dir.listFiles()//我在这里列出文件
LinkedHashSet yyyy=新LinkedHashSet();
LinkedHashSet mm=新LinkedHashSet();
LinkedHashSet dd=新LinkedHashSet();
LinkedHashSet日期=新建LinkedHashSet();
Calendar c=Calendar.getInstance();
用于(文件sl:文件)
{
c=Calendar.getInstance();
c、 setTimeInMillis(sl.lastModified());
int year=c.get(日历年);
int day=c.get(日历日期);
int month=c.get(日历月);
//系统输出打印项次(年);
//系统输出打印项次(天);
//系统输出打印项次(mm);
//系统输出打印项次(天+“/”+月+“/”+年);
yyyy.添加(年);
mm.增加(月);
dd.add(天);
用于(int i:yyyy)
{
新文件(dest+“/”+i).mkdirs();
用于(整数j:mm)
{
如果(i==年&j==月)
{
新文件(dest+“/”+i+“/”+j).mkdirs();
}
用于(int k:dd)
{
如果(i==年&j==月&k==日)
{
新文件(dest+“/”+i+“/”+j+“/”+k).mkdirs();//在此处创建文件夹
}
}
}
}
}

您可以使用
apachecommons IO
库的
org.Apache.Commons.IO.FileUtils
来复制文件

FileUtils.copyFile(source, dest);

这是复制文件的简单方法。还有其他/优化的方法可以复制文件,您可以在internet上找到。

如果我没有弄错,您希望通过创建具有年、月和日期的分层结构文件夹和子文件夹,按上次修改日期对文件夹中的文件进行排序

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class NewClass7 {
    public static void main(String[] args) throws IOException {
        File dir = new File("C:/path_to_yor_dir/");
        File [] files = dir.listFiles(); 
        //Create a function that returns a LocalDate for a given file by converting the lastModifided atribute to LocalDate
        Function<File,LocalDate> func = f -> LocalDate.ofInstant(Instant.ofEpochMilli(f.lastModified()), ZoneId.systemDefault());
        //Create a map by grouping your files by date with the function above
        Map<LocalDate, List<File>> map = Stream.of(files).filter(File::isFile).collect(Collectors.groupingBy(func));
        for(LocalDate d: map.keySet()){
            System.out.println(d);
            //create a directorie for each found year, month and date
            Path target = Paths.get("C:/path_to_yor_dir/" + d.getYear() + "/" + d.getMonthValue() + "/" + d.getDayOfMonth());
            Files.createDirectories(target);
            for(File f: map.get(d)){
                    System.out.println(f);
                    Path from = f.toPath();
                    //copy files or use Files.move(...) if you want to move them
                    Files.copy(from, target.resolve(f.getName()), StandardCopyOption.REPLACE_EXISTING);
            }
            System.out.println();
        }
    }
}
导入java.io.File;
导入java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.nio.file.StandardCopyOption;
导入java.time.Instant;
导入java.time.LocalDate;
导入java.time.ZoneId;
导入java.util.List;
导入java.util.Map;
导入java.util.function.function;
导入java.util.stream.collector;
导入java.util.stream.stream;
公共类NewClass7{
公共静态void main(字符串[]args)引发IOException{
文件目录=新文件(“C:/path\u to\u yor\u dir/”;
File[]files=dir.listFiles();
//创建一个函数,通过将LastModified atribute转换为LocalDate来返回给定文件的LocalDate
函数func=f->LocalDate.ofInstant(Instant.ofEpochMilli(f.lastModified()),ZoneId.systemDefault());
//使用上述函数按日期对文件进行分组,从而创建地图
Map Map=Stream.of(files).filter(File::isFile).collect(Collectors.groupingBy(func));
对于(LocalDate d:map.keySet()){
系统输出打印ln(d);
//为找到的每个年份、月份和日期创建目录
Path target=Path.get(“C:/Path_to_yor_dir/”+d.getYear()+“/”+d.getMonthValue()+“/”+d.getDayOfMonth());
创建目录(目标);
for(文件f:map.get(d)){
系统输出打印ln(f);
路径from=f.toPath();
//复制文件或使用文件。如果要移动文件,请移动(…)
文件.copy(from,target.resolve(f.getName()),StandardCopyOption.REPLACE_EXISTING);
}
System.out.println();
}
}
}

这里到底有什么不起作用?代码看起来是正确的,只是不完整。我创建了structire我需要复制文件的帮助请参阅本文:你能给我代码吗