Инициализация программы с файлами, передаваемыми в качестве основных аргументов (system.getProperty())

StackOverflow https://stackoverflow.com/questions/1693744

Вопрос

Мне нужно выполнить свою программу с помощью этой строки:

java -DImport=data.txt -Din=input.dat -Dout=output1.dat main.Main

Я пытался понять, как это сделать, но не могу заставить это работать.Я использую Netbeans, так как мне не очень нравятся пути к классам терминала Unix и так далее.

public static void main(String[] args) {    
    String fileIn;
    fileIn = System.getProperty ("Import");
}

fileIn получает значение null в результате предыдущего оператора.

Я только начинаю с -DImport=data.txt, после того как разберусь с этим, попробую остальные.


Эта часть выполнена, спасибо.Я попробую установить стандартный ввод как файл -Din вместо клавиатуры.Спасибо


Я сделал то, что вы сказали Cartoonfox: он печатает Import null, что означает, что fileIn не получает никакой строки из System.getProperty("Import");

Я также получаю это предупреждение:

предупреждение:Tempercation] readline () в java.io.datainputstream была устарела Line = dis.readline ();

Я использую код с этой страницы: http://www.java-tips.org/java-se-tips/java.io/how-to-read-file-in-java.html так как я мало знаю читателей :(

Это было полезно?

Решение

Мне кажется, вы путаете 2 понятия:

  • Джава аргументы относится к параметрам, передаваемым после имени класса.Итак, если вы позвоните:

java main.MyMain 0 1 2

твой аргументы будет:

аргументы[0] = 0

аргументы[1] = 1

аргументы[2] = 2

  • Джава характеристики это то, что вы передаете с -D, как в -DImport=data.txt

В своем коде вы смешиваете и то, и другое.Удалить строку

если (args.length == 1)

и это сработает :)

Другие советы

уронить if (args.length == 1) поскольку вы не анализируете аргументы, а устанавливаете системные свойства.

Аргументы программы идут после основного класса следующим образом

main.Main arg1=val arg2=val2

Подумайте о -Import=foo как о способе установки для параметра конфигурации «Импорт» значения «foo».

Просто отбросьте оператор if:

public static void main(String[] args) {

String fileIn;
fileIn = System.getProperty ("Import");
System.out.println("Import "+fileIn);
}

Кстати, я думаю, что Sun выбрала -D (в отличие от чего-то еще), потому что многие компиляторы C позволяют вам устанавливать макрос в командной строке с -D - это означает, что это будет способ установки именованных «констант» в команде. -линия...что похоже на то, что происходит в Java.

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

Script started on Sat Nov  7 18:16:25 2009
bash-3.2$ cat T.java
public class T {

public static void main(String[] args) {

String fileIn;
fileIn = System.getProperty ("Import");
System.out.println("Import "+fileIn);
}
}
bash-3.2$ javac T.java
bash-3.2$ java -DImport=data.txt -Din=input.dat -Dout=output1.dat T
Import data.txt
bash-3.2$ exit
exit

Script done on Sat Nov  7 18:17:07 2009
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top