2013-08-27 14 views
5

Ho una semplice app Java che sta tentando di copiare un file attraverso la WAN (dall'Irlanda a New York).FileUtils.copyFile non riesce per file di grandi dimensioni

L'ho modificato di recente per utilizzare FileUtils perché la copia del file Java nativo era troppo lenta. Ho studiato e ho scoperto che poiché Fileutils utilizza NIO è meglio. La copia file ora funziona alla grande, ma di tanto in tanto ho bisogno di copiare i file di grandi dimensioni (> 200 MB) e la copia fallisce con l'errore:

java.io.IOException: Failed to copy full contents from... 

So che l'errore significa che la dimensione del file di destinazione non è la stessa come il fonte, quindi inizialmente ho capito che si trattava di problemi di rete. Il processo tenta ripetutamente di copiare il file ogni paio d'ore ma non ha mai successo. Tuttavia, quando copio il file manualmente tramite uno sviluppatore di Windows, funziona perfettamente. Questo sembrerebbe escludere la rete ... ma non ne sono sicuro.

Ho cercato ma non ho trovato nessun post con lo stesso identico problema. Qualsiasi aiuto sarebbe molto apprezzato.

Grazie!

Aggiunta:
Sto usando questo metodo fileutils:

public static void copyFile(java.io.File srcFile, java.io.File destFile) throws java.io.IOException 
+0

C'è un certo numero di metodi chiamati 'copyFile' in' FileUtils'. Se aggiungi del codice per mostrare esattamente quello che stai facendo, potremmo fornire più aiuto. –

+0

Possibile duplicato http://stackoverflow.com/questions/15805303/copying-a-file-using-fileutils-copyfile –

+0

Ciao, ho visto il post che hai menzionato ma che ha a che fare con il blocco dei file. Ogni volta che copio il file ha un nome univoco, quindi non ho questo problema. – Tony

risposta

3

Così ho trovato il problema di essere sulla cartella di destinazione. C'è un processo di polling che supponiamo di raccogliere il file dopo che è stato copiato. Tuttavia, il file veniva spostato prima che la copia fosse completata. Questo probabilmente non accadrebbe su un'unità Windows perché il file sarebbe bloccato (ho provato localmente e non potevo cancellare mentre il file sta copiando). Tuttavia, la cartella di destinazione è una condivisione Celerra montata. Il processo unix sotto il cofano è ciò che cattura il file ... Suppongo che non importi se qualche processo di Windows sta ancora scrivendo su di esso.

Grazie per il tuo tempo medPhys-pl!