Un programma errato quando si tenta di spostare file da una directory a un'altra. Dopo molto debugging ho individuato l'errore scrivendo un piccolo programma di utilità che sposta semplicemente un file da una directory a un'altra (codice sotto). Si scopre che mentre lo spostamento dei file sul filesystem locale funziona correttamente, il tentativo di spostare un file su un altro file system fallisce.Java non riesce a spostare (rinominare) un file quando il file risultante si trova su un altro filesystem
Perché è questo? La domanda potrebbe essere specifica per una piattaforma: stiamo eseguendo Linux su ext3, se questo è importante.
E la seconda domanda; dovrei usare qualcos'altro rispetto al metodo renameTo()
della classe File
? Sembra che funzioni solo su filesystem locali.
test (eseguito come root):
touch /tmp/test/afile
java FileMover /tmp/test/afile /root/
The file move was successful
touch /tmp/test/afile
java FileMover /tmp/test/afile /some_other_disk/
The file move was erroneous
Codice:
import java.io.File;
public class FileMover {
public static void main(String arguments[]) throws Exception {
boolean success;
File file = new File(arguments[0]);
File destinationDir = new File(arguments[1]);
File destinationFile = new File(destinationDir,file.getName());
success = file.renameTo(destinationFile);
System.out.println("The file move was " + (success?"successful":"erroneous"));
}
}
Errr ... non ha ancora caricare la vostra risposta, mentre Ho composto il mio :), moveFile è il salvatore +1 – mprabhat
Il tuo suggerimento su Apache Commons era esattamente il mio prossimo passo. Grazie per una risposta informativa che risponde effettivamente a entrambe le domande! – oligofren
Per aggiungere alla risposta eccellente già fornita in precedenza, la chiamata di sistema utilizzata in rinominare restituisce EXDEV se oldpath e newpath non si trovano sullo stesso file system montato. Infatti un programma come "mv" gestisce questa situazione facendo una copia esplicita seguita dall'operazione di cancellazione. – ghostkadost