Ao inicializar o programa com os arquivos passados como argumentos principais (sistema.getProperty())

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

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 :(

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top