package picocli.examples.cjk; import picocli.AutoComplete; import picocli.AutoComplete.GenerateCompletion; import picocli.CommandLine; import picocli.CommandLine.Command; import picocli.CommandLine.Option; import picocli.CommandLine.Parameters; import picocli.CommandLine.PropertiesDefaultProvider; import java.io.File; import java.math.BigInteger; import java.nio.file.Files; import java.security.MessageDigest; import java.util.concurrent.Callable; @Command(name = "checksum", mixinStandardHelpOptions = true, version = "checksum 4.0", subcommands = GenerateCompletion.class, defaultValueProvider = PropertiesDefaultProvider.class, description = "ファイルのチェックサム(デフォルトはMD5)を標準出力に表示する。", header = { "@|cyan " + " _ _ _ _ ___ \n" + " _ | |_ | | | | |/ __|\n" + " | || | || | |_| | (_ |\n" + " \\__/ \\__/ \\___/ \\___|\n" + "|@"}) class CheckSum implements Callable { @Parameters(index = "0", description = "このファイルのチェックサムを計算する") private File file; @Option(names = {"-a", "--algorithm"}, description = "MD5, SHA-1, SHA-256, ...") private String algorithm = "MD5"; public static void main(String... args) { System.exit(new CommandLine(new CheckSum()).execute(args)); } @Override public Integer call() throws Exception { byte[] fileContents = Files.readAllBytes(file.toPath()); byte[] digest = MessageDigest.getInstance(algorithm).digest(fileContents); System.out.printf("%0" + (digest.length * 2) + "x%n", new BigInteger(1, digest)); return 0; } }