С помощью аргумента командной строки для передачи файлов в программу

Как я могу получить файл в качестве аргумента командной строки?

4 ответов


просто путь к файлу передается, внутри вашей программы используйте класс Java File для его обработки

в качестве пути к файлу используется первый параметр:

import java.io.File;

public class SomeProgram {
    public static void main(String[] args) {
        if(args.length > 0) {
            File file = new File(args[0]);

            // Work with your 'file' object here
        }
    }
}

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

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

[пользователь@desktop ~] $ java Foo

все Пользователь типы после имени класса считаются параметром. например:

[пользователь@desktop ~] $ java Foo бар Базом

теперь ваша программа получает два параметра: бар и баз. эти параметры хранятся в массиве args. как обычный массив Java, первый параметр может быть получено через args[0], второй параметр можно получить, обратившись к args[1] и так далее. Если вы попробуйте получить доступ к недопустимой позиции (когда пользователь не ввел то, что вы ожидали), этот оператор выдаст ArrayIndexOutOfBoundsException, как и с любым массивом. вы можете проверить, сколько параметров было набрано с помощью args.length.

Итак, вернемся к вашему вопросу. пользователь может сообщить имя файла в качестве параметра командной строки, и вы можете прочитать это значение с помощью аргумента main метод, обычно называемый args. вы должны проверить, действительно ли он набрал что-то в качестве аргумента (проверка длина массива), и если все в порядке, вы получаете доступ args[0] чтобы прочитать, что он напечатал. затем, вы можете создать File объект на основе этой строки, и делать то, что вы хотите сделать с ним. всегда проверяйте, ввел ли пользователь ожидаемое количество параметров, иначе при доступе к массиву вы получите исключение.

вот полный пример использования параметров командной строки:

public class Foo {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("no arguments were given.");
        }
        else {
            for (String a : args) {
                System.out.println(a);
            }
        }
    }
}

этот класс будет анализировать параметры, сообщенные пользователем. если он не печатает что угодно, класс напечатает сообщение "никаких аргументов не было дано."если он сообщит любое количество параметров, эти параметры будут показаны на экране. Итак, запустив этот класс с двумя примерами, которые я дал на этот ответ, вывод будет:

[пользователь@desktop ~] $ java Foo
возражений не последовало.
[пользователь@desktop ~] $ java Foo bar baz
бар
бэз


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


Я видел пару других решений, но я думаю, они не будут работать если вы. Например,C:\Program Files\file.dat как аргумент командной строки. Тогда это не сработает, так как вы только берете args[0] при создании нового файла.

таким образом, вы должны сделать что-то вроде следующего, объединить все части данного аргумента, а затем сделать из него файл:

import java.io.File;

public class SomeProgram {
    public static void main(String[] args) {
        String current = "";
        File lastFile = null;
        for(String str : args){
            File newFile = new File((current + " " + str).trim());
            if(newFile.exists()){
                lastFile = newFile;
            }
        current += " " + str;
        }
        File yourFile = lastFile;
    }
}

В настоящее время я работаю над аналогичной проблемой, и это, похоже, делает трюк.