Copiar todo diretório e seu conteúdo para outro diretório. [RESOLVIDO]

Pessoal, preciso de uma ajuda pra copiar ou mover um diretório com todo seu conteúdo (subpastas + arquivos) para outro diretório.
Pesquisei na API, fórum e google, mas não achei nada que servisse.
Não é viável eu criar os diretórios e depois copiar os arquivos usando File, pois haverá casos em que a estrutura do diretório a ser copiado é muito grande.
Há algum método no java que copie diretórios?

Não há alguma coisa pronta. Se a quantidade de dados for muito grande (no caso do Windows), eu recomendaria usar o comando do Windows Resource Kit chamado “robocopy”. Esse comando é bem mais confiável que “arrastar e soltar” do Windows Explorer. Se o “robocopy” encontrar algum problema durante a cópia, é possível executar o comando de novo que ele continua de onde parou.

Vlw pela resposta. Não conheço esse comando. Pode dar um exemplo?

Achei algo a respeito. Vou ver se consigo implementar.
http://www.linhadecodigo.com.br/ArtigoImpressao.aspx?id=1342

Se você digitá-lo sem parâmetros,

C:\Program Files\Windows Resource Kits\Tools>robocopy

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows     ::     Version XP010
-------------------------------------------------------------------------------

  Started : Thu Feb 25 10:31:49 2010

       Simple Usage :: ROBOCOPY source destination /MIR

             source :: Source Directory (drive:\path or \\server\share\path).
        destination :: Destination Dir  (drive:\path or \\server\share\path).
               /MIR :: Mirror a complete directory tree.

    For more usage information run ROBOCOPY /? or read Robocopy.Doc.

NOTE: Read "True Replication" in Robocopy.Doc prior to first use of /MIR !
****  /MIR can DELETE files as well as copy them !

Há um .doc nesse mesmo diretório.

Um dos usos é a cópia simples e pura. Eu normalmente uso:

robocopy /v /e /z /r:1 /w:1 /eta origem destino

Você pode excluir alguns arquivos (por exemplo, se você não quer copiar arquivos .class, apenas .java, você pode usar o parâmetro /xf *.class

Outro uso é deixar 2 diretórios exatamente iguais, removendo os arquivos a mais que existem no diretório de destino. Use a opção /mir

[quote=Winthorp]Pessoal, preciso de uma ajuda pra copiar ou mover um diretório com todo seu conteúdo (subpastas + arquivos) para outro diretório.
Pesquisei na API, fórum e google, mas não achei nada que servisse.
Não é viável eu criar os diretórios e depois copiar os arquivos usando File, pois haverá casos em que a estrutura do diretório a ser copiado é muito grande.
Há algum método no java que copie diretórios?[/quote]

Mão. Você tem que implementar um método recursivo que copia. Veja que a copia de pastas implica na criação das pastas e depois na copia dos arquivos.
A copia dos arquivos em si tb não tem uma forma padrão para ser feita.

No caso do Unix, Linux etc., um “cp -R” já resolve.

Pessoal, estou quase conseguindo o que queria. Executo o comando através Runtime.getRuntime().exec(comando)
robocopy “origem” “destino” /mir --> esse comando, copia toda a estrutura de pastas para o destino, porém, se já houver arquivos no destino, ele apaga e copia os novos.
Isso é uma característica do próprio comando. “Delete destination files and directories that no longer exist in the source.
/PURGE :: delete dest files/dirs that no longer exist in source.
/MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).

O comando move não deleta o que já existe no destino, mas não está copiando a estrutura de pastas, somente arquivos.
Alguém que conheça melhor esse utilitário, sabe que parâmetros posso usar para não apagar o que já existe no destino?
Estou procurando, mas não achei nada ainda.

[quote]Um dos usos é a cópia simples e pura. Eu normalmente uso:

robocopy /v /e /z /r:1 /w:1 /eta origem destino[/quote]
Esse comando tb está apagando o que já existe no destino, ao invés de copiar os novos arquivos e pastas e manter o que já existe.

Espera um pouquinho.
Você não quer sobrepôr o que já existe?
É que esse comando não tem essa inteligência (de perguntar o que já existe, e renomear para um nome diferente caso já existir o tal arquivo).
Se você precisa de tal inteligência, então é necessário escrever um programa diferente mesmo.

[quote]Espera um pouquinho.
Você não quer sobrepôr o que já existe?[/quote]
Não é sobrepor, mas sim manter cópias anteriores já realizadas na pasta e acrescentar os novos.

Achei a combinação de parâmetros.
robocopy /move /e
Deleta a origem e mantém o que já existe no destino.
Agora vou testar se em uma nova cópia em que no destino exista um arquivo com o mesmo nome, aí sim deve sobrepor para ficar o mais novo.

Por enquanto, obrigado a todos pela ajuda. Se esse detalhe que irei testar funcionar, marco o post como RESOLVIDO.

É isso aí, quando tem um arquivo com o mesmo nome, ele é sobreposto mantendo o mais atualizado.
Obrigado pela ajuda.