package testIO;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class FileList {
public static void main(String[] args) throws Exception {
String path="F:\\";//假设目录是F:\
List<String> fileNames = getFileNames(path);
Map<Integer,List<String>> map=new HashMap<>();//Integer:第几类文件,List<String>:该类文件下的文件名
int i=0;
while(!fileNames.isEmpty()){
String newPath=path+i+"\\";
File dir=new File(newPath);
if(dir.isDirectory()){
if(dir.exists()){
dir.delete();
}
}
dir.mkdir();
List<String> list=new ArrayList<>();
list.add(fileNames.get(0));
copyFileToDir(fileNames.get(0), path, newPath);
if(fileNames.size()>1){
for(int j=fileNames.size()-1;j>=1;j--){
boolean flag = compareFiles(path+fileNames.get(0), path+fileNames.get(j));
if(flag){
copyFileToDir(fileNames.get(i), path, newPath);
list.add(fileNames.get(j));
fileNames.remove(j);
}
}
}
fileNames.remove(0);
map.put(i, list);
i++;
}
Set<Integer> keySet = map.keySet();
for(Integer integer:keySet){
System.out.println(integer+":");
List<String> list = map.get(integer);
for(String string:list){
System.out.print(string+" ");
}
System.out.println();
}
}
public static void copyFileToDir(String fileName,String oldPath,String newPath) throws Exception{
FileInputStream fileInputStream=new FileInputStream(oldPath+fileName);
File file=new File(newPath+fileName);
if(file.exists()){
file.delete();
}
FileOutputStream fileOutputStream=new FileOutputStream(new File(newPath+fileName));
int length=fileInputStream.available();
byte[] buf=new byte[length];
fileInputStream.read(buf);
fileOutputStream.write(buf);
fileInputStream.close();
fileOutputStream.flush();
fileOutputStream.close();
}
public static List<String> getFileNames(String path){
File file=new File("F:\\");
File[] listFiles = file.listFiles();
List<String> list=new ArrayList<>();
for(File file2:listFiles){
if(file2.getName().endsWith("txt")){
list.add(file2.getName());
}
}
return list;
}
public static boolean compareFiles(String file1,String file2) throws Exception{
FileInputStream inputStream1=new FileInputStream(file1);
FileInputStream inputStream2=new FileInputStream(file2);
int length1=inputStream1.available();
int length2=inputStream2.available();
if(length1!=length2){
inputStream1.close();
inputStream2.close();
return false;
}else{
byte[] buf1=new byte[length1];
byte[] buf2=new byte[length1];
inputStream1.read(buf1);
inputStream2.read(buf2);
inputStream1.close();
inputStream2.close();
for(int i=0;i<length1;i++){
if(buf1[i]!=buf2[i]){
return false;
}
}
return true;
}
}
}