Foros del Web » Programación para mayores de 30 ;) » Java »

Ejecutar comando linux desde Java

Estas en el tema de Ejecutar comando linux desde Java en el foro de Java en Foros del Web. QUE TAL: NECESITO EJECUTAR EL SIGUIENTE COMANDO LINUX DESDE JAVA : bzip2 -dc *.tar.bz2 | tar -x ESE COMANDO SI LO EJECUTO DESDE LA LINEA ...
  #1 (permalink)  
Antiguo 15/06/2007, 12:46
 
Fecha de Ingreso: abril-2007
Mensajes: 31
Antigüedad: 17 años
Puntos: 0
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
  #2 (permalink)  
Antiguo 16/06/2007, 12:00
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
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");
  #3 (permalink)  
Antiguo 20/06/2007, 06:41
 
Fecha de Ingreso: abril-2007
Mensajes: 31
Antigüedad: 17 años
Puntos: 0
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();
}
}
}
  #4 (permalink)  
Antiguo 07/05/2008, 00:44
 
Fecha de Ingreso: junio-2007
Mensajes: 3
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Ejecutar comando linux desde Java

Cita:
Iniciado por carota Ver Mensaje
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.
  #5 (permalink)  
Antiguo 03/08/2008, 15:47
 
Fecha de Ingreso: agosto-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
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
  #6 (permalink)  
Antiguo 22/12/2009, 02:41
 
Fecha de Ingreso: mayo-2009
Mensajes: 169
Antigüedad: 14 años, 11 meses
Puntos: 3
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!
__________________
http://felinfo.blogspot.com/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 21:51.