Retroceder   Foros del Web > Programación para sitios web > Java y JSP

Respuesta
 
Herramientas Desplegado
Antiguo 15-jun-2007, 12:46   #1 (permalink)
carota ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 31
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
carota está desconectado   Responder Citando
Antiguo 16-jun-2007, 12:00   #2 (permalink)
Colaborador
TolaWare tiene algunos puntos positivos de karma
 
Avatar de TolaWare
 
Fecha de Ingreso: julio-2005
Mensajes: 4.253
Enviar un mensaje por MSN a TolaWare
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");
TolaWare está desconectado   Responder Citando
Antiguo 20-jun-2007, 06:41   #3 (permalink)
carota ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 31
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();
}
}
}
carota está desconectado   Responder Citando
Antiguo 07-may-2008, 00:44   #4 (permalink)
emicuda ha deshabilitado el karma
 
Fecha de Ingreso: junio-2007
Mensajes: 3
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.
emicuda está desconectado   Responder Citando
Antiguo 03-ago-2008, 15:47   #5 (permalink)
Jack_Spider ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2008
Mensajes: 2
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
Jack_Spider está desconectado   Responder Citando
Respuesta

Calificación: Calificación de Tema: 2 votos, 5,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Desactivado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 11:55.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93