Como faço para mover um arquivo de um local para outro em Java?
91
Como você move um arquivo de um local para outro? Quando executo meu programa, qualquer arquivo criado naquele local é movido automaticamente para o local especificado. Como sei qual arquivo foi movido?
Primeiro você pergunta como mover um arquivo, depois diz que alguns arquivos estão sendo movidos automaticamente. Você pode deixar sua pergunta mais clara?
File # renameTo faz isso (ele pode não apenas renomear, mas também mover entre diretórios, pelo menos no mesmo sistema de arquivos).
Renomeia o arquivo indicado por este nome de caminho abstrato.
Muitos aspectos do comportamento deste método são inerentemente dependentes da plataforma: A operação de renomeação pode não ser capaz de mover um arquivo de um sistema de arquivos para outro, pode não ser atômico e pode não ter sucesso se um arquivo com o nome de caminho abstrato de destino já existe. O valor de retorno deve sempre ser verificado para garantir que a operação de renomeação foi bem-sucedida.
Se você precisar de uma solução mais abrangente (como mover o arquivo entre discos), consulte Apache Commons FileUtils # moveFile
myFile.renameTo (new File ("/ the / new / place / newname.file"));
djangofan 01 de
4
Sim, não forneça apenas o novo diretório pai. E verifique se o caminho já existe.
Thilo,
2
Observe que o myFilecaminho do objeto não é atualizado por este comando. Portanto, ele estará apontando para um arquivo que não está mais lá.
Evgeni Sergeev
1
@Sulemankhan - sim, ele também exclui o arquivo. Realmente o move no sistema de arquivos
leole de
2
@JulienKronegg: Isso provavelmente depende do seu SO / sistema de arquivos. Acho que no Linux você pode mover (ou excluir) arquivos que estão abertos no momento (e continuar a acessá-los por meio do identificador de arquivo existente), mas não no Windows.
Thilo
62
Com Java 7 ou mais recente, você pode usar Files.move(from, to, CopyOption... options).
Basta adicionar os caminhos das pastas de origem e destino.
Ele moverá todos os arquivos e pastas da pasta de origem para a pasta de destino.
File destinationFolder =newFile("");File sourceFolder =newFile("");if(!destinationFolder.exists()){
destinationFolder.mkdirs();}// Check weather source exists and it is folder.if(sourceFolder.exists()&& sourceFolder.isDirectory()){// Get list of the files and iterate over themFile[] listOfFiles = sourceFolder.listFiles();if(listOfFiles !=null){for(File child : listOfFiles ){// Move files to destination folder
child.renameTo(newFile(destinationFolder +"\\"+ child.getName()));}// Add if you want to delete the source folder
sourceFolder.delete();}}else{System.out.println(sourceFolder +" Folder does not exists");}
Você poderia executar uma ferramenta externa para essa tarefa (como copyem ambientes Windows), mas, para manter o código portátil, a abordagem geral é:
leia o arquivo de origem na memória
Grave o conteúdo em um arquivo no novo local
exclua o arquivo de origem
File#renameTofuncionará desde que a origem e o local de destino estejam no mesmo volume. Pessoalmente, evito usá-lo para mover arquivos para pastas diferentes.
Escrevi este método para fazer exatamente isso em meu próprio projeto apenas com o arquivo de substituição se houver lógica nele.
// we use the older file i/o operations for this rather than the newer jdk7+ Files.move() operationprivateboolean moveFileToDirectory(File sourceFile,String targetPath){File tDir =newFile(targetPath);if(tDir.exists()){String newFilePath = targetPath+File.separator+sourceFile.getName();File movedFile =newFile(newFilePath);if(movedFile.exists())
movedFile.delete();return sourceFile.renameTo(newFile(newFilePath));}else{
LOG.warn("unable to move file "+sourceFile.getName()+" to directory "+targetPath+" -> target directory does not exist");returnfalse;}}
Respostas:
File # renameTo faz isso (ele pode não apenas renomear, mas também mover entre diretórios, pelo menos no mesmo sistema de arquivos).
Se você precisar de uma solução mais abrangente (como mover o arquivo entre discos), consulte Apache Commons FileUtils # moveFile
fonte
myFile
caminho do objeto não é atualizado por este comando. Portanto, ele estará apontando para um arquivo que não está mais lá.Com Java 7 ou mais recente, você pode usar
Files.move(from, to, CopyOption... options)
.Por exemplo
Veja a documentação do Files para mais detalhes
fonte
Para mover um arquivo, você também pode usar Jakarta Commons IOs FileUtils.moveFile
Em caso de erro, ele lança um
IOException
, então, quando nenhuma exceção é lançada, você sabe que o arquivo foi movido.fonte
File.renameTo
do Java IO pode ser usado para mover um arquivo em Java. Veja também esta pergunta do SO .fonte
Basta adicionar os caminhos das pastas de origem e destino.
Ele moverá todos os arquivos e pastas da pasta de origem para a pasta de destino.
fonte
Java 6
Java 7 (usando NIO)
fonte
Você poderia executar uma ferramenta externa para essa tarefa (como
copy
em ambientes Windows), mas, para manter o código portátil, a abordagem geral é:File#renameTo
funcionará desde que a origem e o local de destino estejam no mesmo volume. Pessoalmente, evito usá-lo para mover arquivos para pastas diferentes.fonte
Experimente isto: -
fonte
Você pode usar o
Files
objetofonte
Escrevi este método para fazer exatamente isso em meu próprio projeto apenas com o arquivo de substituição se houver lógica nele.
fonte
Por favor, tente isso.
fonte
close
instruções estivessem em umfinally
bloco ou se ele usasse um bloco try-with-resources.Você pode tentar esta .. solução limpa
fonte
javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: REPLACE_EXISTING