¿Cómo muevo un archivo de una ubicación a otra en Java?
95
¿Cómo se mueve un archivo de una ubicación a otra? Cuando ejecuto mi programa, cualquier archivo creado en esa ubicación se mueve automáticamente a la ubicación especificada. ¿Cómo sé qué archivo se mueve?
File # renameTo hace eso (no solo puede cambiar el nombre, sino también moverse entre directorios, al menos en el mismo sistema de archivos).
Cambia el nombre del archivo indicado por este nombre de ruta abstracto.
Muchos aspectos del comportamiento de este método son inherentemente dependientes de la plataforma: es posible que la operación de cambio de nombre no pueda mover un archivo de un sistema de archivos a otro, que no sea atómico y que no tenga éxito si un archivo con el nombre de ruta abstracto de destino ya existe. Siempre se debe verificar el valor de retorno para asegurarse de que la operación de cambio de nombre fue exitosa.
Si necesita una solución más completa (como querer mover el archivo entre discos), consulte Apache Commons FileUtils # moveFile
myFile.renameTo (new File ("/ the / new / place / newname.file"));
djangofan
4
Sí, no se limite a proporcionar el nuevo directorio principal. Y asegúrese de que el camino ya existe.
Thilo
2
Tenga en cuenta que myFileeste comando no actualiza la ruta del objeto . Entonces apuntará a un archivo que ya no está allí.
Evgeni Sergeev
1
@Sulemankhan: sí, también elimina el archivo. Realmente lo mueve en el sistema de archivos
leole
2
@JulienKronegg: Eso probablemente depende de su sistema operativo / sistema de archivos. Creo que en Linux puede mover (o eliminar) archivos que están abiertos actualmente (y continuar accediendo a ellos a través del identificador de archivos existente), pero no en Windows.
Thilo
63
Con Java 7 o más reciente puede usar Files.move(from, to, CopyOption... options).
Simplemente agregue las rutas de las carpetas de origen y destino.
Moverá todos los archivos y carpetas de la carpeta de origen a la carpeta 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");
}
Puede ejecutar una herramienta externa para esa tarea (como copyen entornos de Windows) pero, para mantener el código portátil, el enfoque general es:
leer el archivo de origen en la memoria
escribir el contenido en un archivo en la nueva ubicación
eliminar el archivo fuente
File#renameTofuncionará siempre que la ubicación de origen y de destino estén en el mismo volumen. Personalmente, evitaría usarlo para mover archivos a diferentes carpetas.
@BullyWiiPlaza: lea el gran descargo de responsabilidad en la respuesta de Thilo. Está roto de muchas formas en algunas plataformas (por ejemplo, Windows).
Escribí este método para hacer esto mismo en mi propio proyecto solo con el archivo de reemplazo si existe lógica en él.
// we use the older file i/o operations for this rather than the newer jdk7+ Files.move() operationprivatebooleanmoveFileToDirectory(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");
returnfalse;
}
}
Respuestas:
myFile.renameTo(new File("/the/new/place/newName.file"));
File # renameTo hace eso (no solo puede cambiar el nombre, sino también moverse entre directorios, al menos en el mismo sistema de archivos).
Si necesita una solución más completa (como querer mover el archivo entre discos), consulte Apache Commons FileUtils # moveFile
fuente
myFile
este comando no actualiza la ruta del objeto . Entonces apuntará a un archivo que ya no está allí.Con Java 7 o más reciente puede usar
Files.move(from, to, CopyOption... options)
.P.ej
Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);
Consulte la documentación de Archivos para obtener más detalles.
fuente
Para mover un archivo, también puede usar Jakarta Commons IOs FileUtils.moveFile
En caso de error, arroja un
IOException
, por lo que cuando no se lanza ninguna excepción, sabrá que el archivo se movió.fuente
File.renameTo
from Java IO se puede utilizar para mover un archivo en Java. También vea esta pregunta SO .fuente
Simplemente agregue las rutas de las carpetas de origen y destino.
Moverá todos los archivos y carpetas de la carpeta de origen a la carpeta 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"); }
fuente
Java 6
public boolean moveFile(String sourcePath, String targetPath) { File fileToMove = new File(sourcePath); return fileToMove.renameTo(new File(targetPath)); }
Java 7 (con 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; }
fuente
Puede ejecutar una herramienta externa para esa tarea (como
copy
en entornos de Windows) pero, para mantener el código portátil, el enfoque general es:File#renameTo
funcionará siempre que la ubicación de origen y de destino estén en el mismo volumen. Personalmente, evitaría usarlo para mover archivos a diferentes carpetas.fuente
Prueba esto :-
boolean success = file.renameTo(new File(Destdir, file.getName()));
fuente
Puedes usar el
Files
objetofuente
Escribí este método para hacer esto mismo en mi propio proyecto solo con el archivo de reemplazo si existe lógica en él.
// 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; } }
fuente
Por favor intente esto.
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; }
fuente
close
instrucciones estuvieran en unfinally
bloque, o si usara un bloque try-with-resources.Puedes probar esta ... solución limpia
fuente
javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: REPLACE_EXISTING