replaced Algorythm and made it way faster
This commit is contained in:
parent
a0d2e5b90f
commit
c721ba3486
3 changed files with 54 additions and 43 deletions
|
|
@ -4,55 +4,49 @@ import java.nio.file.Path;
|
|||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
public class ThreadedCompare extends Thread {
|
||||
private final List<Path> pathsToCompareTo;
|
||||
private final List<Path> pathsToBeCompared;
|
||||
public ThreadedCompare (List<Path> pathsToBeCompared, List<Path> pathsToCompareTo) {
|
||||
this.pathsToBeCompared = pathsToBeCompared;
|
||||
//private HashMap<String, List<Path>> threadFileMap = new HashMap<>();
|
||||
|
||||
public ThreadedCompare (List<Path> pathsToCompareTo) {
|
||||
|
||||
this.pathsToCompareTo = pathsToCompareTo;
|
||||
}
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
//Compare every File
|
||||
for (Path file1 : pathsToBeCompared) {
|
||||
for (Path file2 : pathsToCompareTo) {
|
||||
try {
|
||||
if (sameContent(file1, file2)) {
|
||||
List<Path> bothList = new ArrayList<>();
|
||||
String md5 = getMD5Sum(file1.toFile());
|
||||
|
||||
bothList.add(file1);
|
||||
bothList.add(file2);
|
||||
|
||||
//here it is trying to add the values in the HashMap so everything is nice and clear
|
||||
Main.fileMap.putIfAbsent(md5, bothList);
|
||||
|
||||
if (!bothList.isEmpty()) {
|
||||
|
||||
Main.fileMap.get(md5).remove(file1);
|
||||
Main.fileMap.get(md5).remove(file2);
|
||||
Main.fileMap.get(md5).addAll(bothList);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
for (Path file : pathsToCompareTo) {
|
||||
List<Path> fileArray = new ArrayList<>();
|
||||
assert fileArray != null;
|
||||
fileArray.add(file);
|
||||
String MD5;
|
||||
try {
|
||||
MD5 = getMD5Sum(file.toFile());
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
//Update the Progress that can be found in The Main Class
|
||||
Main.progress += 1;
|
||||
|
||||
|
||||
if (Main.fileMap.containsKey(MD5)) {
|
||||
fileArray.addAll(Main.fileMap.get(MD5));
|
||||
Main.fileMap.put(MD5, fileArray);
|
||||
} else {
|
||||
Main.fileMap.put(MD5, fileArray);
|
||||
}
|
||||
|
||||
|
||||
Main.progress++;
|
||||
}
|
||||
//Update the thread Completion Counter that can be found in the Main Class
|
||||
Main.completedThreads += 1;
|
||||
}
|
||||
private boolean sameContent(Path file1, Path file2) throws IOException {
|
||||
if (file1 != file2) {
|
||||
return Files.mismatch(file1, file2) == -1;
|
||||
}
|
||||
return false;
|
||||
|
||||
|
||||
Main.completedThreads++;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
//this is used to get the MD5 String of one of the files (one of them is just fine since they both have the same value)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue