Инициализация программы с файлами, передаваемыми в качестве основных аргументов (system.getProperty())
-
18-09-2019 - |
Вопрос
Мне нужно выполнить свою программу с помощью этой строки:
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