Как обеспечить Java-программу внешними файлами при выполнении команды запуска в консоли? - PullRequest
0 голосов
/ 09 октября 2018

Так что это может показаться тривиальным вопросом, но я не могу найти там никакой информации, которая бы отвечала на мой вопрос.Тем не менее, это очень общий вопрос кодирования.

Предположим, у вас есть Java-программа, которая читает файл и создает структуру данных на основе информации, предоставленной файлом.Итак, вы делаете:

javac javaprogram.java
java javaprogram

Достаточно просто, но я хочу предоставить программе файл, указанный в командной строке, например:

javac javaprogram.java
java javaprogram -file

Чтокод я должен написать, чтобы завершить эту самую проблему?Спасибо.

Ответы [ 4 ]

0 голосов
/ 09 октября 2018

Одна из лучших командных строк служебных библиотек для Java , существует JCommander .

Aтривиальная реализация, основанная на описании вашего потока:

public class javaprogram {
    @Parameter(names={"-file"})
    String filePath;

    public static void main(String[] args) {
        javaprogram main = new javaprogram();
        JCommander.newBuilder().addObject(program).build().parse(args);

        // use your file path which is now accessible through filePath
    }

}

Вы должны убедиться, что библиотека jar доступна в вашем classpath при компиляции javaprogram.java файл класса.

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

public class javaprogram {

    private static final String FILE_SWITCH = "-file";

    public static void main(String[] args) {
        if ((args.length == 2) && (FILE_SWITCH.equals(args[0]))) {
            final String filePath = args[1];
            // use your file path which is now accessible through filePath
        }
    }

}
0 голосов
/ 09 октября 2018

Самый простой способ сделать это - использовать -D, поэтому, если у вас есть какой-то файл, вы можете вызвать

java -Dmy.file=file.txt javaprogram

А внутри вашей программы вы можете прочитать его с помощью System.getProperty("my.file").

public class Main {

    public static void main(String[] args) {

        String filename = System.getProperty("my.file");
        if (filename == null) {
            System.exit(-1); // Or wharever you want
        }

        // Read and process your file
    }
}

Или вы можете использовать сторонний инструмент, такой как picocli

import java.io.File;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;

@Command(name = "Sample", header = "%n@|green Sample demo|@")
public class Sample implements Runnable {

    @Option(names = {"-f", "--file"}, required = true, description = "Filename")
    private File file;

    @Override
    public void run() {
        System.out.printf("Loading %s%n", file.getAbsolutePath());
    }

    public static void main(String[] args) {
        CommandLine.run(new Sample(), System.err, args);
    }
}
0 голосов
/ 09 октября 2018

Пойдемте шаг за шагом.Сначала вам нужно передать путь к файлу в вашей программе.Допустим, вы выполняете свою программу следующим образом:

java javaprogram /foo/bar/file.txt

Строки, которые идут после "javaprogram", будут переданы в качестве аргументов вашей программе.Это причина синтаксиса основного метода:

public static void main(String[] args) {
 //args is the array that would store all the values passed when executing your program
 String filePath = args[0]; //filePath will contain /foo/bar/file.txt
}

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

Посмотрите на класс File и класс FileInputStream.https://www.mkyong.com/java/how-to-read-file-in-java-fileinputstream/

Это должно помочь вам начать.

Удачи!

0 голосов
/ 09 октября 2018

Вы можете передать путь к файлу в качестве аргумента двумя способами:

1)

public class Main {

    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("File path plz");
            return;
        }
        System.out.println("File path: " + args[0]);
    }

}

2) Использовать JCommander

...