Como copiar subpastas?

2 respostas
J

Olá garela do forum…

Gostaria de saber como copiar todos os subdiretórios de uma pasta para outra.
Tenho um método que copia os arquivos de uma pasta origem para uma pasta destino,
mas ela só funciona se a pasta origem possir apenas arquivos, caso ela possua
outras subpastas dentro dela o metodo não funciona. Segue o código:

public static void copyAll(File origem, File destino)throws IOException {

		FileChannel oriChannel = null;
		FileChannel destChannel = null;

		try {

			if (!destino.exists())

				destino.mkdir();

			File[] listaDeArquivos = origem.listFiles();

			for (File file : listaDeArquivos) {

				file.setLastModified(origem.lastModified());

				// Cria channel na origem
				oriChannel = new FileInputStream(file.getPath()).getChannel();

				// Cria channel no destino
				System.out.println("Copiando arquivo: " + file.getName());
				destChannel = new FileOutputStream(destino + "\\"
						+ file.getName()).getChannel();

				// Copia conteúdo da origem no destino
				destChannel.transferFrom(oriChannel, 0, oriChannel.size());

				// Fecha channels
				oriChannel.close();
				destChannel.close();

				System.out.println("");

			}
			
			Runtime.getRuntime().exec("explorer " + destino.getAbsolutePath());  
			
			System.out.println("Sincronização concluída com sucesso!");

		} catch (IOException e) {

			String msg = e.getMessage();

			Erro novoErro = new Erro(msg);
			
			JOptionPane.showMessageDialog(null, "Ocorreu um erro durante a sincronização das pastas");

		} finally {

			if (oriChannel != null && oriChannel.isOpen()) {

				oriChannel.close();
			}

			if (destChannel != null && destChannel.isOpen()) {

				destChannel.close();
			}

		}
	}

Como recriar no destino as subpastas da origem???

Agradeço desde já!!!

2 Respostas

ctosin

Olá,

Para resolver problemas deste tipo normalmente você pode usar recursão. Você pode usar o método isDirectory() da classe File para verificar se o objeto representa um arquivo ou um diretório. Se for um diretório, você chama o método listFiles() e continua o processo.

Mas para evitar ter esse trabalho, dê uma olhada na API Commons IO da Apache (http://commons.apache.org/io). Ela tem alguns métodos bastante interessantes. Dê uma olhada na classe FileUtils.

Abraço

J

ctosin:
Olá,

Para resolver problemas deste tipo normalmente você pode usar recursão. Você pode usar o método isDirectory() da classe File para verificar se o objeto representa um arquivo ou um diretório. Se for um diretório, você chama o método listFiles() e continua o processo.

Mas para evitar ter esse trabalho, dê uma olhada na API Commons IO da Apache (http://commons.apache.org/io). Ela tem alguns métodos bastante interessantes. Dê uma olhada na classe FileUtils.

Abraço

[b]…

Valeu mesmo pela dica! Está sendo muito util.
[/b]

Criado 14 de março de 2010
Ultima resposta 16 de mar. de 2010
Respostas 2
Participantes 2