欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java使用 Argparse4j 解析命令行参数,,argparse4j 是

来源: javaer 分享于  点击 36254 次 点评:113

java使用 Argparse4j 解析命令行参数,,argparse4j 是


argparse4j 是 Python argparse 命令行解析器的 Java 语言移植版

package cn.outofmemory.commandline;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.channels.ByteChannel;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import java.nio.file.StandardOpenOption;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import net.sourceforge.argparse4j.ArgumentParsers;import net.sourceforge.argparse4j.inf.ArgumentParser;import net.sourceforge.argparse4j.inf.ArgumentParserException;import net.sourceforge.argparse4j.inf.Namespace;public class Checksum {    public static void main(String[] args) {        ArgumentParser parser = ArgumentParsers.newArgumentParser("Checksum")                .defaultHelp(true)                .description("Calculate checksum of given files.");        parser.addArgument("-t", "--type")                .choices("SHA-256", "SHA-512", "SHA1").setDefault("SHA-256")                .help("Specify hash function to use");        parser.addArgument("file").nargs("*")                .help("File to calculate checksum");        Namespace ns = null;        try {            ns = parser.parseArgs(args);        } catch (ArgumentParserException e) {            parser.handleError(e);            System.exit(1);        }        MessageDigest digest = null;        try {            digest = MessageDigest.getInstance(ns.getString("type"));        } catch (NoSuchAlgorithmException e) {            System.err.printf("Could not get instance of algorithm %s: %s",                    ns.getString("type"), e.getMessage());            System.exit(1);        }        for (String name : ns.<String> getList("file")) {            Path path = Paths.get(name);            try (ByteChannel channel = Files.newByteChannel(path,                    StandardOpenOption.READ);) {                ByteBuffer buffer = ByteBuffer.allocate(4096);                while (channel.read(buffer) > 0) {                    buffer.flip();                    digest.update(buffer);                    buffer.clear();                }            } catch (IOException e) {                System.err                        .printf("%s: failed to read data: %s", e.getMessage());                continue;            }            byte md[] = digest.digest();            StringBuffer sb = new StringBuffer();            for (int i = 0, len = md.length; i < len; ++i) {                String x = Integer.toHexString(0xff & md[i]);                if (x.length() == 1) {                    sb.append("0");                }                sb.append(x);            }            System.out.printf("%s  %s\n", sb.toString(), name);        }    }}

输出结果

$ java Checksum -husage: Checksum [-h] [-t {SHA-256,SHA-512,SHA1}] [file [file ...]]Calculate checksum of given files.positional arguments:  file                   File to calculate checksumoptional arguments:  -h, --help             show this help message and exit  -t {SHA-256,SHA-512,SHA1}, --type {SHA-256,SHA-512,SHA1}                         Specify hash function to use (default: SHA-256)$ java Checksum file1.cc file1.h6bd85bf4b936bc8870c70bea04cd12d4fe3745934f511e6e188d718d32154a79  file1.cc839ef370cbd54f62985bac7b974cc575eaaa24a8edd6ae7787cfc71829ceda40  file1.h$ java Checksum -t SHA1 file1.cc20bada64dde97b98faaba09ebbfdb70af71476f1  Checksum.class

maven配置

<dependency>  <groupId>net.sourceforge.argparse4j</groupId>  <artifactId>argparse4j</artifactId>  <version>0.1.0</version></dependency>
相关栏目:

用户点评