Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; public class DigestCalculator { /** * @param args */ public static void main(String[] args) { if (args.length < 2) { System.err.println("Usage: java DigestCalculator \"Caminho_Arq1\" \"Caminho_Arq2\" ... \"Caminho_ArqN\" \"Caminho_ArqListaDigest\""); System.exit(1); } List<String> argList = Arrays.asList(args); List<String> files = argList.subList(0, argList.size()-1); String digestsFilePath = argList.get(argList.size()-1); // check digestfile path File file = new File(digestsFilePath); if(!file.isFile()) { System.err.println("\"Caminho_ArqListaDigest\" is not a valid file path."); System.exit(1); } // check all files path int i = 0; for(String filePath : files) { i++; file = new File(filePath); if(!file.isFile()) { System.err.println(filePath+" (\"Caminho_Arq"+i+"\") is not a valid file path."); System.exit(1); } } // build the map for verification Map<String, Map<String, String>> digestMap = buildMap(digestsFilePath); // check all files for(String filePath : files) { try { byte[] fileBytes = getFileBytes(new File(filePath)); List<String> digestTypes = Arrays.asList("SHA1", "MD5"); byte[] digest; String digestHex; String fileName; // check both digest types for(String digestType : digestTypes ) { MessageDigest messageDigest = MessageDigest.getInstance(digestType); messageDigest.update(fileBytes); digest = messageDigest.digest(); digestHex = convertToHex(digest); fileName = getFileName(filePath); // digest check and output if(digestMap.containsKey(fileName)) { Map<String, String> digestTypeMap = digestMap.get(fileName); if(digestTypeMap.containsKey(digestType)) { if(digestTypeMap.get(digestType).equals(digestHex)) { System.out.println(fileName +" "+ digestType +" "+ digestHex +" (OK)"); } else { System.out.println(fileName +" "+ digestType +" "+ digestHex +" (NOT OK)"); } } else { System.out.println(fileName +" "+ digestType +" "+ digestHex +" (NOT FOUND)"); appendDigestToFileBottom(digestsFilePath, fileName, digestType, digestHex); } } else { System.out.println(fileName +" "+ digestType +" "+ digestHex +" (NOT FOUND)"); appendDigestToFileBottom(digestsFilePath, fileName, digestType, digestHex); } } } catch (IOException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } private static void appendDigestToFileBottom(String digestsFilePath, String fileName, String digestType, String digestHex) { try { FileWriter fw = new FileWriter(digestsFilePath, true); BufferedWriter out = new BufferedWriter(fw); out.write(fileName +" "+ digestType +" "+ digestHex +"\n"); out.close(); } catch(IOException e) { e.printStackTrace(); } } private static byte[] getFileBytes(File file) throws IOException { // check file if (!file.exists()) { return null; } // verify file size long length = file.length(); int maxLength = Integer.MAX_VALUE; if (length > maxLength) throw new IOException(String.format("The file %s is too large", file.getName())); int len = (int) length; byte[] bytes = new byte[len]; InputStream in = new FileInputStream(file); // read bytes int offset = 0, n = 0; while (offset < len && n >= 0) { n = in.read(bytes, offset, len - offset); offset += n; } if (offset < len) throw new IOException("Failed to read the full content from: " + file.getName()); in.close(); return bytes; } private static String getFileName(String filePath) { String[] fileParts = filePath.split("\\\\"); String fileName = fileParts[fileParts.length-1]; return fileName; } private static String convertToHex(byte[] byteSequence) { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < byteSequence.length; i++) { String hex = Integer.toHexString(0x0100 + (byteSequence[i] & 0x00FF)).substring(1); buffer.append((hex.length() < 2 ? "0" : "") + hex); } return buffer.toString(); } private static Map<String, Map<String, String>> buildMap(String fileName) { try { BufferedReader in = new BufferedReader(new FileReader(fileName)); Map<String, Map<String, String>> digestMap = new HashMap<String, Map<String,String>>(); String buffer; while ((buffer = in.readLine()) != null) { String[] line = buffer.split(" "); Map<String, String> digestTypeMap; if(digestMap.containsKey(line[0])) { digestTypeMap = digestMap.get(line[0]); } else { digestTypeMap = new HashMap<String, String>(); } digestTypeMap.put(line[1], line[2]); digestMap.put(line[0], digestTypeMap); } in.close(); return digestMap; } catch (IOException e) { e.printStackTrace(); return null; } } }