如何从命令行Java中提取两条路径



我正在制作一个霍夫曼树实现,该实现获取一些数据并打印树的叶子,或将树序列化为文件。该实现使用一个自定义命令行程序,该程序接收标志,源路径(~/example/dir/source.txt)和输出路径(~/example/dir/)。看起来像

mkhuffmantree -s -f ~/example/dir/source.txt ~/example/dir/ 

我不是使用框架或库传递命令行参数,我想手动进行。我的解决方案是:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
class mkhuffmantree
{ 
    boolean help = false;
    boolean interactive = false;
    boolean verbose = false;
    boolean serialize = false;
    boolean fromFile = false;
    File source;
    Path outputPath;
  public void readArgs(String[] args){
        for (String val:args) 
        if(val.contains(-h)){
            help = true;
        } else if(val.contains(-i)){
            interactive = true;
        } else if(val.contains(-v)){
            verbose = true;
        } else if(val.contains(-s)){
            serialize = true;
        } else if(val.contains(-f)){
            fromFile = true;
        }
    }
    public void main(String[] args){  
        if (args.length > 0){ 
            readArgs(args);            
        } 
    } 
} 

但是,在解释了标志之后,我不知道如何将~/example/dir/source.txt存储在File source中,而~/example/dir/Path outputPath

您需要在阅读值时具有状态。

首先,我建议使用此命令:

mkhuffmantree -s -f ~/example/dir/source.txt -o ~/example/dir/ 

然后,当您击中-f时,您将一个新变量设置为源(也许是枚举?也许是枚举?也可能是最终的静态int值1)当您点击-O设置-O SET" NEXTPARAM"到输出时

然后在开关之前,但在循环内(不要忘记添加您应该在说明后应该放置的牙套!)您想要以下内容:

if(nextParam == SOURCE) {
    fromFile = val;
    nextParam = NONE; // Reset so following params aren't sent to source
    continue;   // This is not a switch so it won't match anything else
}

重复输出

做到这一点的另一种方法:

如果您不想使用-O,则有另一种方法不需要-f或-o除非来源已经具有一个值,否

如果您这样做,您可以完全摆脱-f,这是毫无意义的,因为您只是说这两个值不匹配,因为将交换机假定为您的文件。

您可以做这样的事情:

        for (int i = 0; i < args.length; i++) {
            String val = args[i];
            if (val.contains("-h")) {
                help = true;
            } else if (val.contains("-i")) {
                interactive = true;
            } else if (val.contains("-v")) {
                verbose = true;
            } else if (val.contains("-s")) {
                serialize = true;
            } else if (val.contains("-f")) {
                fromFile = true;
                source = new File(args[++i]);
            }
        }
        outputPath = Paths.get(args.length - 1);

另外,请看Apache Cli

相关内容

  • 没有找到相关文章

最新更新