Поиск…


Синтаксис

  • public static void main (String [] args)

параметры

параметр подробности
арг Аргументы командной строки. Предполагая, что main метод вызывается Java-пусковой установкой, args будет не нулевым и не будет иметь null элементов.

замечания

Когда обычное Java-приложение запускается с использованием команды java (или эквивалента), вызывается main метод, передающий аргументы из командной строки в массиве args .

К сожалению, библиотеки классов Java SE не обеспечивают прямой поддержки обработки аргументов команды. Это дает вам две альтернативы:

  • Реализовать обработку аргументов вручную в Java.
  • Используйте стороннюю библиотеку.

Эта тема попытается охватить некоторые из более популярных сторонних библиотек. Подробный список альтернатив см. В этом ответе на вопрос StackOverflow «Как анализировать аргументы командной строки в Java?» ,

Обработка аргументов с использованием GWT ToolBase

Если вы хотите анализировать более сложные аргументы командной строки, например, с необязательными параметрами, лучше всего использовать подход GWT Google. Все классы доступны по адресу:

https://gwt.googlesource.com/gwt/+/2.8.0-beta1/dev/core/src/com/google/gwt/util/tools/ToolBase.java

Пример для обработки командной строки myprogram -dir "~/Documents" -port 8888 является:

public class MyProgramHandler extends ToolBase {
   protected File dir;
   protected int port;
   // getters for dir and port
   ...

   public MyProgramHandler() {
       this.registerHandler(new ArgHandlerDir() {
            @Override
            public void setDir(File dir) {
                this.dir = dir;
            }
       });
       this.registerHandler(new ArgHandlerInt() {
            @Override
            public String[] getTagArgs() {
               return new String[]{"port"};
            }
            @Override
            public void setInt(int value) {
               this.port = value;
            }
       });
   }
   public static void main(String[] args) {
      MyProgramHandler myShell = new MyProgramHandler();
      if (myShell.processArgs(args)) {
         // main program operation
         System.out.println(String.format("port: %d; dir: %s",
            myShell.getPort(), myShell.getDir()));
      }
      System.exit(1);
   }
}

ArgHandler также имеет метод isRequired() , который может быть переписан , чтобы сказать , что требуется аргумент командной строки (возврат по умолчанию является false , так что аргумент является необязательным.

Обработка аргументов вручную

Когда синтаксис командной строки для приложения прост, разумно полностью выполнять обработку аргумента команды в пользовательском коде.

В этом примере мы представим серию простых тематических исследований. В каждом случае код будет выдавать сообщения об ошибках, если аргументы неприемлемы, а затем вызвать System.exit(1) чтобы сообщить оболочке, что команда не выполнена. (Мы будем предполагать в каждом случае, что Java-код вызывается с помощью оболочки, имя которой «myapp».)

Команда без аргументов

В данном случае команда не требует аргументов. Код показывает, что args.length дает нам количество аргументов командной строки.

public class Main {
    public static void main(String[] args) {
        if (args.length > 0) {
            System.err.println("usage: myapp");
            System.exit(1);
        }
        // Run the application
        System.out.println("It worked");
    }
}

Команда с двумя аргументами

В этом случае-исследовании команда требует только двух аргументов.

public class Main {
    public static void main(String[] args) {
        if (args.length != 2) {
            System.err.println("usage: myapp <arg1> <arg2>");
            System.exit(1);
        }
        // Run the application
        System.out.println("It worked: " + args[0] + ", " + args[1]);
    }
}

Обратите внимание, что если мы пренебрегли проверкой args.length , команда выйдет из строя, если пользователь запустит ее с слишком небольшим количеством аргументов командной строки.

Команда с параметрами «флаг» и, по крайней мере, один аргумент

В данном случае команда имеет пару (необязательных) опций флага и требует по крайней мере одного аргумента после опций.

package tommy;
public class Main {
    public static void main(String[] args) {
        boolean feelMe = false;
        boolean seeMe = false;
        int index;
        loop: for (index = 0; index < args.length; index++) {
            String opt = args[index];
            switch (opt) {
            case "-c":
               seeMe = true;
               break;
            case "-f":
               feelMe = true;
               break;
            default:
               if (!opts.isEmpty() && opts.charAt(0) == '-') {
                   error("Unknown option: '" + opt + "');
               }
               break loop;
            }
        }
        if (index >= args.length) {
            error("Missing argument(s)");
        }      
        
        // Run the application
        // ...
    }

    private static void error(String message) {
        if (message != null) {
            System.err.println(message);
        }
        System.err.println("usage: myapp [-f] [-c] [ <arg> ...]");
        System.exit(1);
   }
}

Как вы можете видеть, обработка аргументов и опций становится довольно громоздкой, если синтаксис команды является сложным. Целесообразно использовать библиотеку «синтаксический анализ командной строки»; см. другие примеры.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow