Cópia de arquivo Java (fácil e rápida)ArquivoCanal#transferTo
Em Javacopiar arquivoApresentando um programa de exemplo para fazer isso.
O programa de amostra é baseado no novo I/O introduzido no J2SE1.4. java.nio.channels.FileChannel#transferTo método.
Você pode escrever um programa de processamento de cópia sem se preocupar com o buffer necessário para ler os dados, tornando-o o método de codificação mais simples.
O que é um canal?
A palavra canal é usada de muitas maneiras diferentes.
Basicamente, parece indicar um caminho de transmissão para entrada e saída de dados entre outros dispositivos.java.nio.channels.FileChannel é uma classe que representa uma conexão para leitura e gravação em arquivos.
transferir para Um método pode transferir bytes de um arquivo de origem para um canal de destino.
O seguinte é citado do documento JavaAPI.
transferTo(posição longa, contagem longa, destino WritableByteChannel)
Transfere bytes do arquivo deste canal para o canal de bytes graváveis especificado.
Este método pode ser muito mais eficiente do que um simples loop que lê dados deste canal e os grava no canal de destino. Muitos sistemas operacionais podem transferir bytes diretamente do cache do sistema de arquivos para o canal de destino. Neste momento, nenhum byte é copiado.
Este resultado de verificação mostra como usar um fluxo normal,
O processo de cópia foi mais rápido que outros métodos FileChannel (como usar o método ByteBuffer#allocateDirect).
programa de amostra
FileChannel srcChannel = novo
FileInputStream(srcPath).getChannel();
FileChannel destChannel = novo
FileOutputStream(destPath).getChannel();
tentar {
srcChannel.transferTo(0, srcChannel.size(), destChannel);
} finalmente {
srcChannel.close();
destChannel.close();
}
}
execução
Para copiar o arquivo de programa de amostra, preparamos um arquivo "100M.txt" de 100 MB diretamente na unidade C.
No programa de exemplo C:\100M.txt copiando C:\a.txt Crie um arquivo.
A amostra foi executada no ambiente a seguir.
SO: WindowsXP
Processador: Athlon 1,46 GHz
Memória: 1GB
JRE: 1.6.4
◆Exemplo de execução
/** * Exemplo de execução * @param args */ public static void main(String[] args) { try { copyTransfer("C:\\100M.txt", "C:\\a.txt"); } catch (IOException e) { e.printStackTrace(); } }
ArquivoCanal#transferTo No processamento de cópia usando o método
A cópia de um arquivo de 100 MB foi concluída em cerca de 3 segundos. Além disso, o uso de heap durante o processo de cópia foi de cerca de 300 (KB).
Por falar nisso,Cópia do arquivo Java (alterar tamanho do buffer)No método introduzido em
Quando especificamos o tamanho de buffer mais eficiente de 1.000 KB, o tempo de processamento foi de cerca de 4 segundos e o uso de heap foi de cerca de 1.300 KB.
Até mesmo a cópia de arquivos por stream pode ser acelerada ajustando o tamanho do buffer, então
Pode-se dizer que não há muita diferença no processo de cópia de um único arquivo.
No entanto, ao copiar arquivos grandes continuamente ou executar vários processos de cópia em paralelo, o FileChannel pode ser eficaz em termos de velocidade de processamento e uso de heap.