我试图在java中构建一个命令行工具,例如,如果我在控制台" dir c:/...."中写下,它将激活我的Dir类并且将会得到" c:/...." path作为Dir类的参数,并使用hashmap执行此操作。
我不知道如何通过命令行和hashmap传递参数, 它甚至可能吗?
每个命令都有它自己的类,它实现了主要的"命令"接口,带有doCommand()函数。
在CLI类中运行start()函数后,它应该接受命令并执行请求的命令。
命令界面:
public interface Command {
public void doCommand();
}
我的CLI类:
public class CLI {
BufferedReader in;
PrintWriter out;
HashMap<String, Command> hashMap;
Controller controller;
public CLI(Controller controller, BufferedReader in, PrintWriter out,
HashMap<String, Command> hashMap) {
this.in = in;
this.out = out;
this.hashMap = hashMap;
}
public void start() {
new Thread(new Runnable() {
@Override
public void run() {
try {
out.println("Enter a command please:");
String string = in.readLine();
while (!string.equals("exit")) {
Command command = hashMap.get(string);
command.doCommand();
string = in.readLine();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
}
让我举一个例如我的DirCommmand,正如我之前所说,它应该识别&#34; dir&#34;字符串通过我的hashMap配置,并应将下一个字作为路径的字符串参数传递
public class DirCommand implements Command {
@Override
public void doCommand() {
System.out.println("doing dir command...");
}
}
和我的hashmap配置:
hashMap.put("dir", new DirCommand());
在一个不同的类中设置hashMap配置,并在项目开始时将其传递给CLI类的hashMap对象。
我很想得到一些帮助,因为我不知道该怎么做。
答案 0 :(得分:0)
首先,为了将参数传递给 doCommand ,我要做的是使用变量参数列表,如:
public interface Command {
public void doCommand(String... params);
}
其次,我会将空格上的输入字符串拆分为:
String[] result = command.split(" ");
最后,命令将是结果[0] ,其余的将传递给 doCommand 方法。