Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   Ejecutar comando linux desde Java (http://www.forosdelweb.com/f45/ejecutar-comando-linux-desde-java-498304/)

carota 15/06/2007 12:46

Ejecutar comando linux desde Java
 
QUE TAL: NECESITO EJECUTAR EL SIGUIENTE COMANDO LINUX DESDE JAVA :

bzip2 -dc *.tar.bz2 | tar -x

ESE COMANDO SI LO EJECUTO DESDE LA LINEA DE COMANDOS DE LINUX ANDA BIEN. CUANDO LO METO EN JAVA NO CORRE.

lo estoy poniendo de la siguiente forma :

Runtime.getRuntime().exec ("bzip2 -dc *.tar.bz2 | tar -x")

Meti todo el comando en un string y puse
Runtime.getRuntime().exec (string ) y lo mismmo

Lo mismo me pasa si quiero borrar por ejemplo todos los *.txt

si pongo desde linea de comando rm *.txt borra todo pero si pongo desde java no hace nada.

Runtime runtime = Runtime.getRuntime();
Process proceso = runtime.exec( "rm *.txt");

Como se resuelve esto ?

Lo puedo resolver con un bash, pero quiero que java ejecute todo.


Gracias

TolaWare 16/06/2007 12:00

Re: Ejecutar comando linux desde Java
 
Este comando puedes programarlo tu mismo, de hecho te recomiendo que lo hagas vos y no que le digas a bash que lo haga (sobre todo si lo que pretendes con java es lograr independencia de la plataforma).
Puedes usar una biblioteca que maneje archivos comprimidos y luego con la misma biblioteca comprimir el archivo.

El manejo de archivos/directorios también te permite eliminar archivos sin tener que recurrir a la linea de comandos.

En todo caso, podrías probar hacer directamente esto:
Runtime.exec("comando");

No estoy seguro que funcione pero me parece más directo que el Runtime.getRuntime().exec("comando");

carota 20/06/2007 06:41

Re: Ejecutar comando linux desde Java
 
Lo resolvi de la siguiente forma viendo un programa de otro foro:
Si bien no entiendo todo lo que hace despues, pongo por un lado como anda y por otro todo el resto de los comandos que ejecuta ese programita para ver que hace.

CON ESTO ANDA IMPECABLE !! EN LUGAR DE PONER bash -c HAY QUE PONER SOLO SH !!

String[] command = {"sh","-c","rm *.txt"};
final Process process = Runtime.getRuntime().exec(command);

DE ACA FUE DONDE SAQUE SOLO ESE CODIGO, PERO NO ENTIENDO BIEN QUE HACE.

import java.io.*;

public class carota
{
public static void main(String[] args)
{
try
{
String[] command = {"sh","-c","bzip2 -dc *.tar.bz2 | tar -x"};
final Process process = Runtime.getRuntime().exec(command);
new Thread()
{
public void run()
{
try{
InputStream is = process.getInputStream();
byte[] buffer = new byte[1024];
for(int count = 0; (count = is.read(buffer)) >= 0;)
{
System.out.write(buffer, 0, count);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}.start();
new Thread()
{
public void run()
{
try{
InputStream is = process.getErrorStream();
byte[] buffer = new byte[1024];
for(int count = 0; (count = is.read(buffer)) >= 0;)
{
System.err.write(buffer, 0, count);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}.start();

int returnCode = process.waitFor();
System.out.println("Return code = " + returnCode);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

emicuda 07/05/2008 00:44

Re: Ejecutar comando linux desde Java
 
Cita:

Iniciado por carota (Mensaje 2042560)
Lo resolvi de la siguiente forma viendo un programa de otro foro:
Si bien no entiendo todo lo que hace despues, pongo por un lado como anda y por otro todo el resto de los comandos que ejecuta ese programita para ver que hace.

CON ESTO ANDA IMPECABLE !! EN LUGAR DE PONER bash -c HAY QUE PONER SOLO SH !!

String[] command = {"sh","-c","rm *.txt"};
final Process process = Runtime.getRuntime().exec(command);

DE ACA FUE DONDE SAQUE SOLO ESE CODIGO, PERO NO ENTIENDO BIEN QUE HACE.

import java.io.*;

public class carota
{
public static void main(String[] args)
{
try
{
String[] command = {"sh","-c","bzip2 -dc *.tar.bz2 | tar -x"};
final Process process = Runtime.getRuntime().exec(command);
new Thread()
{
public void run()
{
try{
InputStream is = process.getInputStream();
byte[] buffer = new byte[1024];
for(int count = 0; (count = is.read(buffer)) >= 0;)
{
System.out.write(buffer, 0, count);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}.start();
new Thread()
{
public void run()
{
try{
InputStream is = process.getErrorStream();
byte[] buffer = new byte[1024];
for(int count = 0; (count = is.read(buffer)) >= 0;)
{
System.err.write(buffer, 0, count);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}.start();

int returnCode = process.waitFor();
System.out.println("Return code = " + returnCode);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}



Hola,
Lo que hace ese comando es en lugar de utilizar la shell bash del sistema operativo, emplea la shell sh, son shells diferentes y puede que por algún motivo te resulte más utili emplear una u otra shell, hay más de ellas y cada una tiene sus utilidades.
No obstante si me gustaría comentar que sería mas conveniente utilizar las funciones y librerias propias de java para tratamiento de ficheros ya que es mucho mas eficaz y rapido por un lado y desligas el software que estas desarrollando de la plataforma en la que lo corras.
Un saludo.

Jack_Spider 03/08/2008 15:47

Respuesta: Ejecutar comando linux desde Java
 
bno en efecto el codigo anterior sirve para ejecutar comandos de linux desde java...
la salida de esto se alamacena en un arreglo de bytes...

Cita:

try{
InputStream is = process.getErrorStream();
byte[] buffer = new byte[1024];

for(int count = 0; (count = is.read(buffer)) >= 0;)
{
System.err.write(buffer, 0, count);
resultado += new String(buffer);
}
he hecho una variable "resultado" para mostrar en mi aplicacion java el resultado de la ejecucion del comando, pero la salida contiene errores.. he probado diferentes formas de convetir el arreglo de bytes a cadena pero sin lograrlo.

gracias

Noelito3 22/12/2009 02:41

Respuesta: Ejecutar comando linux desde Java
 
Buenas.

Aquí hay un ejemplito, espero que te sirva:
http://felinfo.blogspot.com/2009/12/...dos-desde.html

Saludos y felices fiestas!


La zona horaria es GMT -6. Ahora son las 16:00.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.