Получаване на аргументи от командния ред

Написах следното за сканиране на няколко реда код като низ и анализирането му до цяло число. Но в рамките на моя основен метод, аз използвам p.letsReadIn за четене във файла. Някой знае ли как мога да конвертирам това, за да използвам аргумент от командния ред вместо това за приемане на файла? Така че вместо потребителят да промени p.letsReadIn("ReadMuah.txt"); всеки път те могат просто да използват командния ред само за четене във файла.

public void letsReadIn(String filename) throws FileNotFoundException {
        int x;
        Scanner scan = new Scanner(new File(filename));

        StringTokenizer st;
        String nextLine = scan.nextLine();

        st = new StringTokenizer(nextLine);

        x = Integer.parseInt(st.nextToken());

        nextLine = scan.nextLine();

        st = new StringTokenizer(nextLine);

        y= Integer.parseInt(st.nextToken());

        nextLine = scan.nextLine();

        st = new StringTokenizer(nextLine);

        z= Integer.parseInt(st.nextToken());

        for (int i = 0; i < x; i++) {
            nextLine = scan.nextLine();
            st = new StringTokenizer(nextLine);
            listing.add(Integer.parseInt(st.nextToken()));
        }

        scan.close();
    }
    public static void main(String[] args) throws FileNotFoundException {

        BagItems p = new BagItems();
        p.letsReadIn("ReadMuah.txt");
        p.StartBagging();

    }

person user3092043    schedule 15.12.2013    source източник


Отговори (4)


Параметърът String[] args за метода main() са аргументите на командния ред. Ако поставите името на файла в командния ред, то ще бъде в този масив.

person Eric Hydrick    schedule 15.12.2013

Зависи какво имате предвид под "използвайте аргумент от командния ред вместо това за приемане на файла"

Ако имате предвид да вземете самите аргументи от командния ред (буквално), тогава заменете извикванията Scanner и Scanner.parseInt с неща, които итерират над String[] и анализират с помощта на Integer.parseInt(String) извиквания. Но това ще ви даде неудобен за потребителя синтаксис на командния ред, така че може да искате да добавите някои „опции“ или каквото и да е

Ако имате предвид, че искате да можете да посочите източника на входните параметри от командния ред, опитайте нещо подобно:

InputStream in;
if (args.length > 0) {
    in = new FileInoputStream(args[0]);
} else {
    in = System.in;
} = System.in
....
Scanner scan = new Scanner(input);
// Read as before.

Това (или нещо подобно) ще позволи на вашето приложение да чете входа или от именуван файл, или от стандартен вход. В последния случай можете да го стартирате така (на Linux)

$ java ... my.Program << EOF
1
2
...
EOF
person Stephen C    schedule 15.12.2013

Можете да използвате p.parser(args[0]);, разбира се, трябва да проверите дали args съдържа някои низове. т.е. подали сте аргумент, просто направете if (args.length > 0) за това.

person A4L    schedule 15.12.2013

Използвайте първия елемент от args[] вместо твърдо кодираното име на файл в кода.

public static void main(String[] args) throws FileNotFoundException {
    BagItems p = new BagItems();
    if (args.length > 0)
    {
        p.parser(args[0]);
        p.StartBagging();
    }
    else
    {
        p.parser("hard-coded-file.txt");
        p.StartBagging();
    }
}

Сега можете да подадете име на файл към програмата като команден ред и вашият код трябва да избере това.

Моля, обърнете внимание, че индексът на масива започва от 0 по подразбиране в java, така че за достъп до първия елемент от масива (масив с аргументи на командния ред) трябва да използвате [0].

За още съвети, моля, следвайте връзката по-долу.

как да приемате стойности с помощта на аргумент от командния ред в java

person GDroid    schedule 15.12.2013