Использование аргумента командной строки для передачи файлов в программу - PullRequest
7 голосов
/ 28 июня 2009

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

Ответы [ 4 ]

28 голосов
/ 28 июня 2009

Передается только путь к файлу, внутри вашей программы используйте 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
        }
    }
}
8 голосов
/ 28 июня 2009

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

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

[user @ desktop ~] $ java Foo

все, что пользователь вводит после имени класса, считается параметром. например:

[user @ desktop ~] $ java Foo bar baz

теперь ваша программа получила два параметра: bar и baz . эти параметры хранятся в массиве 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);
            }
        }
    }
}

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

[user @ desktop ~] $ java Foo
аргументов не было.
[user @ desktop ~] $ java Foo bar baz
бар
баз

2 голосов
/ 27 октября 2011

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

0 голосов
/ 15 декабря 2014

Я видел пару других решений, но я думаю, что они не будут работать, если вы. Например, укажите 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;
    }
}

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

...