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

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

Ответы на вопрос(4)

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

 S.L. Barth08 нояб. 2012 г., 12:01
Добро пожаловать в StackOverflow! Я думаю, что автор хочет знать, как решить эту проблему, если 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;
    }
}

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

 Jonny Henly20 апр. 2015 г., 08:10
Это хорошее решение, если аргумент (ы), передаваемый программе, представляет собой путь к файлу, содержащий пробелы. Однако это не очень хороший подход, если в программу передается не только путь к файлу. Правильный подход заключается в том, чтобы заключить путь к файлу в кавычки перед отправкой его в программу. Затем программа должна проверить, что каждый аргумент имеет правильный тип, и если нет, отобразить правильный вариант использования и выйти.

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

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

[user @ desktop ~] $ java Foo

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

[user @ desktop ~] $ java Foo 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
ба
Баз

Решение Вопроса

внутри вашей программы используйте класс 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
        }
    }
}
 Sean28 июн. 2009 г., 19:42
@ Johanna: args [0] обращается к аргументам строкового массива в позиции 0 (первый элемент массива). Аргументы передаются в качестве параметра методу main (String [] args) и представляют собой массив строк, содержащий аргументы командной строки, передаваемые программе.
 Johanna28 июн. 2009 г., 19:36
Можете ли вы рассказать мне больше о том, что вы подразумеваете под «arg [0]»? Я не смог найти полезный источник для чтения темы командной строки. :(((
 Kathy Van Stone28 июн. 2009 г., 19:41
Читайте раздел "основной метод" на Java.sun.com / документы / книги / учебник / getStarted / приложение / .... Он достаточно хорошо описывает, что такое "args". Само Учебное пособие является хорошим источником для поиска ответа на ряд возникших вопросов.
 victor hugo28 июн. 2009 г., 19:45
@ Предложение Йоханны Кэти на самом деле очень хорошее, я думаю, вы должны начать читать Java Tutorial, чтобы понять некоторые основы. Переменная 'args' определяется в сигнатуре основного метода, и когда вы набираете args [0], вы получаете доступ к первому элементу массива. Поскольку массив заполняется JVM аргументами командной строки, аргумент [0] будет содержать первый
 Johanna28 июн. 2009 г., 19:49
хорошо, я понял

Ваш ответ на вопрос