Ejecutar comandos dentro de Java

Rafael Muneton
23 de Enero del 2011
Hola a todos:

Estoy haciendo un programa que copie el contenido de una carpeta a ootra en el mismo disco duro, esto debe ser en Java; hacerlo por fuera con comandos del Sistema Operativo es facil, pero hacerlo en Java me esta costando mucho trabajo.
El programa corre, pero no graba nada, ni me truena,simplemente se queda asi por mucho rato, pero sin hacer nada.

Alguien ha hecho algo parecido???
Por cierto estoy trabajando en Windows XP.
Aqui va mi codigo:
++++++++++++++++++++++++++++++++++++++++++++++++++++++
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class RuntimeExec{
public static void main(String[] args){
try
{
String dosCommand = "cmd.exe";
String sourcefile = "C:Instal_Victoriascripts*.*";
String destfolder = "C:InetpubwwwrootVicky";
Runtime rt = Runtime.getRuntime();

Process p = rt.exec(dosCommand+" "+"copy"+" "+sourcefile+" "+destfolder);

/*BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=null;

while((line=input.readLine()) != null)
{
System.out.println(line);
}
*/

p.waitFor();
System.out.println(p.exitValue());
p.destroy();

}catch (IOException e)
{
e.printStackTrace();
}
catch (InterruptedException i)
{
i.printStackTrace();
}

}

}
+++++++++++++++++++++++++++++++++++++++++++++++

Ojala alguien pudiera ayudarme.
Gracias de antemano.
Rafael

Pablo Mall
21 de Marzo del 2011
Tienes que tener en consideración que JAVA es un lenguaje multiplataforma, y si ejecutas CMD, sólo funcionará en Windows.
Aunque no he podido ocupar el comando para BORRAR archivos una vez utilizados por el mismo código. Asi que tambien tengo que invocar a CMD para borrar los archivos copiados en un archivo ".bat"
Mira yo ocupo este código para pasar los archivos de una carpeta a otra y luego borro los archivos copiados...


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

public class stdIO {

public static void copia(String nombreFuente, String nombreDestino) throws IOException {
FileInputStream fis = new FileInputStream(nombreFuente);
FileOutputStream fos = new FileOutputStream(nombreDestino);
FileChannel canalFuente = fis.getChannel();
FileChannel canalDestino = fos.getChannel();
canalFuente.transferTo(0, canalFuente.size(), canalDestino);
fis.close();
fos.close();
}
public static void borrar_archivo(){
try {
Runtime r = Runtime.getRuntime();
Process p = null;
p = r.exec("cmd.exe /K borrar.bat");
}catch(Exception ex) {
System.out.println("No se borraron los archivos de la carpeta");
ex.printStackTrace();
}
}



}



Entonces llamas a las 2 clases...


stdIO stdio = new stdIO();
stdio.copia("C:CarpetaParaCopiar","C:CarpetaParaPegarArchivos");
stdio.borrar_archivo();


El archivo "borrar.bat" contiene:


cd C:CarpetaParaCopiar
del /q *.*


Espero que te sirva.
Saludos.
PabloMall