Come si sposta un file da una posizione a un'altra? Quando eseguo il programma, qualsiasi file creato in quella posizione si sposta automaticamente nella posizione specificata. Come faccio a sapere quale file viene spostato?
Come si sposta un file da una posizione a un'altra? Quando eseguo il programma, qualsiasi file creato in quella posizione si sposta automaticamente nella posizione specificata. Come faccio a sapere quale file viene spostato?
Risposte:
myFile.renameTo(new File("/the/new/place/newName.file"));
File # rename Per farlo (non solo può rinominare, ma anche spostarsi tra le directory, almeno sullo stesso file system).
Rinomina il file indicato da questo percorso astratto.
Molti aspetti del comportamento di questo metodo sono intrinsecamente dipendenti dalla piattaforma: l'operazione di ridenominazione potrebbe non essere in grado di spostare un file da un file system a un altro, potrebbe non essere atomico e potrebbe non riuscire se un file con il percorso astratto di destinazione esiste già. Il valore restituito dovrebbe essere sempre controllato per assicurarsi che l'operazione di ridenominazione sia stata eseguita correttamente.
Se hai bisogno di una soluzione più completa (come spostare il file tra i dischi), guarda Apache Commons FileUtils # moveFile
myFile
percorso dell'oggetto non viene aggiornato da questo comando. Quindi punterà a un file che non è più lì.
Con Java 7 o più recente puoi usare Files.move(from, to, CopyOption... options)
.
Per esempio
Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);
Vedere la documentazione di File per maggiori dettagli
Per spostare un file puoi anche usare Jakarta Commons IOs FileUtils.moveFile
In caso di errore genera un IOException
, quindi quando non viene generata alcuna eccezione sai che il file è stato spostato.
File.renameTo
da Java IO può essere utilizzato per spostare un file in Java. Vedi anche questa domanda SO .
Basta aggiungere i percorsi della cartella di origine e di destinazione.
Sposterà tutti i file e le cartelle dalla cartella di origine alla cartella di destinazione.
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 (utilizzando 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;
}
È possibile eseguire uno strumento esterno per quell'attività (come copy
negli ambienti Windows) ma, per mantenere il codice portatile, l'approccio generale è:
File#renameTo
funzionerà fintanto che la posizione di origine e di destinazione si trovano sullo stesso volume. Personalmente eviterei di usarlo per spostare file in cartelle diverse.
Prova questo :-
boolean success = file.renameTo(new File(Destdir, file.getName()));
Files.move(source, target, REPLACE_EXISTING);
Puoi usare l' Files
oggetto
Ulteriori informazioni sui file
Ho scritto questo metodo per fare proprio questa cosa sul mio progetto solo con il file di sostituzione se esiste la logica in esso.
// 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;
}
}
Per favore prova questo.
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
istruzioni fossero in un finally
blocco o se usasse un blocco try-with-resources.
Puoi provare questa .. soluzione pulita
Files.move(source, target, REPLACE_EXISTING);
javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: REPLACE_EXISTING