如何根据Java中修改的日期对文件进行排序并复制到相应的文件夹
如修改日期为1999年12月31日,则应将其复制到1999->12->31 我将文件保存在一个集合中,并在每个元素和内部循环上循环以创建一个路径帮助我复制文件 我将月日和日期保存在单独的集合中 和嵌套循环,以基于日、月和年创建文件如何根据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
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我需要复制文件的帮助请参阅本文:你能给我代码吗