2013-12-07 3 views
1

Как настроить мой главный, чтобы принять командные переключатели?Как добавить аргументы команды в main? Java

источник порт (-s source_port) и имя хоста назначения (-h hostname) и порт (-p port) принимающего приложения, а также файл журнала аудита (-l log_file). Одно ключевое слово злоупотребления IDS (–m misuse_keyword) и порог неправильного использования (-t misuse_threshold) также указаны в командной строке.

В принципе, я хочу, чтобы -h localhost установил поле с именем hostname = localhost и -l bob.txt, установленное в поле с именем inputfile = "bob.txt". Как это сделать на Java? Я могу сделать это на C и C++, но не знаю, как это сделать на Java.

public static void main(String[] args) { 

} 
+0

Те будут переданы в 'арг 'массив. 'java Test arguments here' будет выполнять класс' Test' с основным методом, с 'String [] {" arguments "," here "}' в качестве аргументов программы. – Obicere

+0

Вы что-то пробовали? С какой частью кода вы боретесь? Вы знаете, как работают массивы Java? Концепции здесь не очень отличаются от концепций в C/C++. – vanza

+0

Собираетесь ли вы вводить ввод вручную? .txt или что-то еще ... – Ashish

ответ

1

ли что-то подобное в вашем main() методе

args = new String[12]; 
    args[0]="-s"; 
    args[1]="source_port";// something integer value "1324" 
    args[2]="-h"; 
    args[3]="hostname"; 
    args[4]="-p"; 
    args[5]="port"; 
    args[6]="-l"; 
    args[7]="log_file"; 
    args[8]="-m"; 
    args[9]="misuse_keyword"; 
    args[10]="-t"; 
    args[11]="misuse_threshold"; 

при хранении в другой переменной

int source_port = Integer.parseInt(args[1]); 
+0

поэтому source_port - это переменная в моем коде, поэтому мне все равно понадобится ее в "" – user977154

+0

@ user977154 хранить ее в '' '' и при инициализации другой переменной pare это значение Integer. –

0

Просто поместите аргумент после имени своей программы. Например

java addProgram 1 2 

В вашем случае, это должно быть

java YourProgramName "-s source_port_value" "-h hostname_value" "-p port_value" 

Эти значения будут получены основным методом в аргументах (массив строк), то вы можете перебирать массив и получить варианты флага и их соответствующие значения для продолжения вашей операции. Я поставил двойные кавычки, чтобы сделать их как одно значение ввода. у нас есть три аргумента, проходящий в основной метод

логики для анализа Значения

public static void main(String[] args){ 

HashMap<String,String> properties = new HashMap<String,String>(); 

for(int i=0;i<args.length;i++){ 

if(args[i].trim().startsWith("-s")) 
properties.put("source_port",args[i].split(" ")[1]); 
if(args[i].trim().startsWith("-h")) 
properties.put("hostname",args[i].split(" ")[1]); 
if(args[i].trim().startsWith("-p")) 
properties.put("port",args[i].split(" ")[1]); 

} 
//this will give you all the property values mapped with their keys after this looping 
//you can get the values from properties map from here onwards 
} 
+0

разве это не так, как я запускаю его? Я пытаюсь проанализировать аргумент команды полям в моем исходном коде – user977154

4

В Java, если вы передаете -h hostname -p port вы получите массив с 4-мя элементами {"-h", "hostname", "-p", "port"}. Таким образом, вам придется вручную управлять ключами.

Вот пример:

private static final String HOST_KEY = "-h"; 
private static final String PORT_KEY = "-p"; 

public static void main(String[] args) 
{ 
    String host = ""; 
    String port = ""; 

    for(int i=0; i<args.length; i+=2) 
    { 
     String key = args[i]; 
     String value = args[i+1]; 

     switch (key) 
     { 
      case HOST_KEY : host = value; 
      case PORT_KEY : port = value; 
     } 
    } 
} 
+0

, где я помещаю это в свою основную часть? – user977154

+0

эти параметры будут содержаться в массиве 'args' –

+0

Мне очень жаль. Это должно быть очень просто. Считаете ли вы, что вы можете показать мне, что именно должно выглядеть на моем главном – user977154

Смежные вопросы