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?
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?
Respostas:
myFile.renameTo(new File("/the/new/place/newName.file"));
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
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
Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);
Veja a documentação do Files para mais detalhes
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.
File.renameTo
do Java IO pode ser usado para mover um arquivo em Java. Veja também esta pergunta do SO .
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 = new File("");
File sourceFolder = new File("");
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 them
File[] listOfFiles = sourceFolder.listFiles();
if (listOfFiles != null)
{
for (File child : listOfFiles )
{
// Move files to destination folder
child.renameTo(new File(destinationFolder + "\\" + child.getName()));
}
// Add if you want to delete the source folder
sourceFolder.delete();
}
}
else
{
System.out.println(sourceFolder + " Folder does not exists");
}
Java 6
public boolean moveFile(String sourcePath, String targetPath) {
File fileToMove = new File(sourcePath);
return fileToMove.renameTo(new File(targetPath));
}
Java 7 (usando NIO)
public boolean moveFile(String sourcePath, String targetPath) {
boolean fileMoved = true;
try {
Files.move(Paths.get(sourcePath), Paths.get(targetPath), StandardCopyOption.REPLACE_EXISTING);
} catch (Exception e) {
fileMoved = false;
e.printStackTrace();
}
return fileMoved;
}
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.
Experimente isto: -
boolean success = file.renameTo(new File(Destdir, file.getName()));
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() operation
private boolean moveFileToDirectory(File sourceFile, String targetPath) {
File tDir = new File(targetPath);
if (tDir.exists()) {
String newFilePath = targetPath+File.separator+sourceFile.getName();
File movedFile = new File(newFilePath);
if (movedFile.exists())
movedFile.delete();
return sourceFile.renameTo(new File(newFilePath));
} else {
LOG.warn("unable to move file "+sourceFile.getName()+" to directory "+targetPath+" -> target directory does not exist");
return false;
}
}
Por favor, tente isso.
private boolean filemovetoanotherfolder(String sourcefolder, String destinationfolder, String filename) {
boolean ismove = false;
InputStream inStream = null;
OutputStream outStream = null;
try {
File afile = new File(sourcefolder + filename);
File bfile = new File(destinationfolder + filename);
inStream = new FileInputStream(afile);
outStream = new FileOutputStream(bfile);
byte[] buffer = new byte[1024 * 4];
int length;
// copy the file content in bytes
while ((length = inStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}
// delete the original file
afile.delete();
ismove = true;
System.out.println("File is copied successful!");
} catch (IOException e) {
e.printStackTrace();
}finally{
inStream.close();
outStream.close();
}
return ismove;
}
close
instruções estivessem em um finally
bloco ou se ele usasse um bloco try-with-resources.
Você pode tentar esta .. solução limpa
Files.move(source, target, REPLACE_EXISTING);
javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: REPLACE_EXISTING