Galera, estou mais uma vez precisando de sua ajuda.
gostaria de saber como execultar comando cmd em java
Algoritmo:
*Abrir cmd
*inserir comando nele via variavel
*execultar comando
Esta função você pode utilizar em Java para executar comandos como se estivesse no prompt do DOS (command):
public synchronized static String execCommand(final String commandLine) throws IOException {
boolean success = false;
String result;
Process p;
BufferedReader input;
StringBuffer cmdOut = new StringBuffer();
String lineOut = null;
int numberOfOutline = 0;
try {
p = Runtime.getRuntime().exec(commandLine);
input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((lineOut = input.readLine()) != null) {
if (numberOfOutline > 0) {
cmdOut.append("\n");
}
cmdOut.append(lineOut);
numberOfOutline++;
}
result = cmdOut.toString();
success = true;
input.close();
} catch (IOException e) {
result = String.format("Falha ao executar comando %s. Erro: %s", commandLine, e.toString());
}
// Se não executou com sucesso, lança a falha
if (!success) {
throw new IOException(result);
}
return result;
}
wiliamps
Meu Deus, pra q tudo isso?
Isso ja resolve
private void exec(){
Process exec;
try {
exec = Runtime.getRuntime().exec("ipconfig");
if ( exec.waitFor() == 0)
System.out.println("Executado.");
else
System.out.println("ERRO");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
que traduzindo é isso
Runtime.getRuntime().exec("ipconfig");
=]
charleston10, ao invés de tentar desmerecer minha ajuda ao colega, por que você não procura uma outra pessoa que necessita de ajuda?
A função que passei é sincronizada para evitar gerar muitos frames de acesso para comando DOS na JVM, trata a resposta e a retorna corretamente e ainda lança exceção legível para ajudar o usuário.
Não tem nada de perplexo na resposta, apenas procurei tratar o nosso amigo lá como um programador de linha profissional e não um amador.
wiliamps
–
^^
[quote=charleston10]E voce esqueceu que a classe Runtime, foi feita pra isso?
Quem desenvolveu foi amador? E outra se tem uma classe pronta, é pq minimiza a tarefa, qual vale mais 1000 linhas de codigos ou 10 linhas de codigos que faz a mesma coisa?
Leva em consideração que ninguem vai ver seu código, eu e vc somos anonimos … ^^[/quote]
Presta atenção, cara. Ele usou a classe Runtime na linha 14 do código dele.
A diferença é que ele fez isso do jeito certo, tratando os fluxos de saída (que podem travar o processo se não forem tratados).
Uma modificação interessante no método dele seria passar por parâmetro o PrintWriter para qual o output será jogado. E então retornar o inteiro retornado pelo método waitFor:
public synchronized static String execCommand(final String commandLine, PrintWriter out) {
Process p = Runtime.getRuntime().exec(commandLine);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String lineOut;
while ((lineOut = input.readLine()) != null) {
out.println(lineOut);
}
input.flush();
input.close();
return p.waitFor();
}
Esse inteiro é o código de retorno do processo. Outra variação seria também tratar o error stream.
Boua…
E que tal assim?
import java.io.IOException;
import java.util.Scanner;
public class Programa {
public static void main(String[] args) {
try {
Process process = Runtime.getRuntime().exec("ipconfig");
Scanner leitor = new Scanner(process.getInputStream());
while (leitor.hasNextLine()) {
System.out.println(leitor.nextLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Também é válido. Mas você parte do pressuposto que o outputstream será sempre texto (o que é válido nesse caso, mas nem sempre), e que a saída será “bem comportada” (sempre terminando no \n). Algumas vezes os processos não colocam o \n no último texto escrito.
Faltou também chamar o waitFor().
Outra coisa. Evite ressuscitar tópicos muito antigos. Esse era de 2012.