Ao inicializar o programa com os arquivos passados como argumentos principais (sistema.getProperty())
-
18-09-2019 - |
Pergunta
Eu tenho que executar o meu programa com esta linha:
java -DImport=data.txt -Din=input.dat -Dout=output1.dat main.Main
Eu estive tentando descobrir como fazer isso, mas realmente não posso fazê-lo funcionar.Eu estou usando o Netbeans, pois eu realmente não obter, junto com o unix de terminais classpaths e assim por diante.
public static void main(String[] args) {
String fileIn;
fileIn = System.getProperty ("Import");
}
fileIn está ficando nulo como resultado da instrução anterior.
Eu estou apenas começando com -DImport=data.txt eu, depois de resolver isso, eu vou tentar os outros.
Essa parte é feito, Obrigado.Vou tentar definição stdin como -Din de ficheiro em vez do teclado.Obrigado
Eu fiz o que você disse cartoonfox, Sua impressão de Importação nulo, o que significa fileIn não receber qualquer Seqüência de caracteres do Sistema.getProperty("Importação");
Eu também estou recebendo este aviso:
aviso:[substituição] readLine() em java.io.DataInputStream foi preterido linha = dis.readLine();
Estou usando o código a partir desta página: http://www.java-tips.org/java-se-tips/java.io/how-to-read-file-in-java.html desde que eu não sei muito de leitores :(
Solução
Eu acho que você está confundindo 2 conceitos:
- Java args refere-se a parâmetros passados após o nome da classe.Então, se você chamar:
java principal.MyMain 0 1 2
o seu args será:
args[0] = 0
args[1] = 1
args[2] = 2
- Java propriedades é o que você está passando com D, como no -DImport=data.txt
No seu código você é mistura de ambos.Remova a linha
if (args.comprimento == 1)
e vai funcionar :)
Outras dicas
derrubar if (args.length == 1)
Como você não está analisando argumentos, mas definindo propriedades do sistema.
Os argumentos do programa vão atrás da classe principal como esta
main.Main arg1=val arg2=val2
Pense em -import = foo como uma maneira de definir a opção de configuração "importar" para valorizar "foo".
Basta soltar a instrução IF:
public static void main(String[] args) {
String fileIn;
fileIn = System.getProperty ("Import");
System.out.println("Import "+fileIn);
}
BTW, acho que a Sun escolheu -d (em oposição a - outra coisa) porque muitos compiladores C permitem que você defina uma macro na linha de comando com -d - o que significa que seria uma maneira de definir "constantes" no comando -Line ... que é semelhante ao que faz em Java.
Não sei por que você ficaria nulo executando isso, então aqui está uma transcrição de compilá -lo e executá -lo - com saída. Você terá que examinar as diferenças entre o que está fazendo e o que estou fazendo nesta transcrição:
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