Introducao Pouco tempo atras tive a necessidade de executar comandos de sistema operacional atraves do codigo Java e por se tratar de uma necessidade que achei interessante e ser algo que raramente utilizo, resolvi compartilhar aqui no blog pra caso alguem tenha a mesma necessidade e tambem para que quando eu mesmo precisa dar uma consultada aqui.Vou postar uma classe Main aqui que permite a execucao de quaisquer comandos no terminal do Sistema Operacional, na solucao aqui vou postar comandos do Windows mas nada impede a utilizacao deste codigo em outros sistemas operacionais.Codigo 1. public class Main { 2. 3. public static void main(String[] args) throws Exception { 4. String[] comandos = { 5. "ping", 6. "http://academicsmaster.blogspot.com.br/" 7. } 8. Process p = Runtime.getRuntime().exec(comandos); 9. InputStream is = p.getInputStream(); 10. resposta = convertStreamToString(is); 11. System.out.println(resposta); 12. } 13. 14. public static String convertStreamToString(InputStream is) throws IOException { 15. if(is != null) { 16. Writer writer = new StringWriter(); 17. char[] buffer = new char[1024]; 18. try { 19. Reader reader = new BufferedReader(new InputStreamReader(is, 20. "ISO-8859-1")); 21. int n; 22. while((n = reader.read(buffer)) != -1) { 23. wirter.write(buffer, 0, n); 24. } 25. } finally { 26. is.close(); 27. } 28. return writer.toString(); 29. } 30. 31. else { 32. return ""; 33. } 34. } DetalhesVamos agora ao detalhamento do codigo:Linha 3: destaque para o fato de o metodo main lancar uma excecao. Essa excecao deve ser declarada por dois motivos: 1 - O execucao de comandos pelo sitema operacional pode gerar excecoes, caso um comando esteja com a sintaxe errada por exemplo; 2 - o metodo para conversao do InputStream para String pode gerar um IOException; Linhas 4 a 7: Um array de String e instanciado com todos os comandos que devem ser executados. Convem destacar que comandos parametrizados, como e o caso do "ping" que tem o parametro do nome de site ou ip que deve ser "pingado", cada parametro corresponde a uma entrada diferente no array;Linha 8: A classe java.lang.Runtime e utilizada para entao executar os comandos no sistema operacional atraves de seu metodo estatico "getRuntime()";Linha 9: Apos a execucao dos comandos na linha 8, o processo esta atualizado com a resposta do sistema operacional ao comando e pode ser processado atraves do metodo getInputStream();Linha 10: Uma vez recuperado o InputStream basta converte-lo para uma String e ter entao a resposta do Sistema Operacional ao comando completamente legivel.O metodo convertStreamToString() e outro que pode ser muito util. Eu particularmente nao consigo lembrar os detalhes desse codigo sempre que preciso converter um InputStream para uma String, entao fica ai mais um local para consulta de metodo para conversao de InputStrem para String.ConclusaoEste codigo apesar de simples e curso pode ser utilizado de forma muito poderosa. E como se tivesse um prompt do DOS (no caso do Windows) disponivel para executar qualquer comando imaginavel. Sem falar no metodo de conversao de InputStream para String que tambem e bastante utilizado no desenvolvimento de aplicacoes java.Acho que e o suficiente por esse post, ate a proxima. IntroducaoUm dos assuntos que gera calorosas