Qual è il modo più veloce per copiare un gran numero di file in Java. Finora ho usato i flussi di file e nio. I flussi complessivi sembrano essere più veloci di nio. Quali esperienze hai fatto fino ad ora?Il modo più veloce per copiare file in Java
risposta
http://www.baptiste-wicht.com/2010/08/file-copy-in-java-benchmark/ potrebbe ottenere la vostra risposta.
Per il benchmark, ho eseguito i test utilizzando file diversi.
- piccolo file (5 KB)
- file di Media (50 KB)
- Big di file (5 MB)
- di file FAT (50 MB)
- e un file grande (1,3 GB) solo binario
E ho eseguito i test prima utilizzando file di testo e quindi utilizzando file binari. Ho effettuato i test utilizzando tre modalità:
- Sullo stesso disco rigido. È un disco rigido IDE da 250 GB con 8 MB di cache. È formattato in Ext4.
- Tra due dischi. Ho usato il primo disco e un altro disco rigido SATA da 250 GB con 16 MB di cache. È formattato in Ext4.
- Tra due dischi. Ho usato il primo disco e un altro disco rigido SATA da 1 TB con 32 MB di cache. È formattato usando NTFS.
Ho utilizzato un quadro di riferimento, described here, per effettuare i test di tutti i metodi. I test sono stati fatti sul mio personal computer (Ubuntu 10.04 64 bit, Intel Core 2 Duo 3.16 GHz, 6 Go DDR2, SATA Hard Disks). La versione Java utilizzato è un Java 7 a 64 bit Virtual Machine ...
grazie, questo risponde alla mia domanda – Mato
Avere java fork da uno script batch del sistema operativo che copia i file. Il tuo codice potrebbe dover scrivere lo script batch.
Già pensato a questo, ma la gestione degli errori sarebbe difficile quando si copiano più di 10.000 file e l'overhead di generare un thread di sistema quando si copiano piccoli file è troppo grande. Inoltre l'app non sarebbe indipendente dalla piattaforma. – Mato
1. Dovrai gestire comunque il controllo degli errori. 2. Hai ragione nel dire che non sarebbe indipendente dalla piattaforma, quindi hai intenzione di eseguirlo su server di diverso tipo? 3. È possibile creare i 10.000 file nella posizione "corretta" per iniziare e non è necessaria una copia? 4. Non generare un thread per file. Un thread per 100 file o qualcosa del genere. –
Sono d'accordo con questo. La copia stupida di file non è un caso d'uso ideale di Java. Se si desidera eseguirlo da Java, inoltrare una chiamata a livello di sistema operativo. – bwawok
userei:
import java.io.*;
import java.nio.channels.*;
public class FileUtils{
public static void copyFile(File in, File out)
throws IOException
{
FileChannel inChannel = new
FileInputStream(in).getChannel();
FileChannel outChannel = new
FileOutputStream(out).getChannel();
try {
inChannel.transferTo(0, inChannel.size(),
outChannel);
}
catch (IOException e) {
throw e;
}
finally {
if (inChannel != null) inChannel.close();
if (outChannel != null) outChannel.close();
}
}
public static void main(String args[]) throws IOException{
FileUtils.copyFile(new File(args[0]),new File(args[1]));
}
}
Se uno dei tuoi file sono più grandi di 64M in Windows potrebbe essere necessario guardare a questo: http://forums.sun.com/thread.jspa?threadID=439695&messageID=2917510
catch (IOException e) { throw e; } <--- nice one – unbeli
È solo un codice di esempio. –
Grazie questo è stato enormemente più veloce di quello che stavo usando! –
È possibile utilizzare uno implementazione fileutils di Apache Commons-IO libreria per copiare il file
FileUtils.copyFile(new File(sourcePath), new File(destPath));
che utilizza FileChannel per IO operazione.
Oppure utilizzare il metodo java.nio.file.Files
copy()
.
- 1. Il modo più veloce per creare file in C#
- 2. Un modo più veloce per copiare un database postgresql (o il modo migliore)
- 3. Il modo più veloce per copiare il contenuto di un vettore in un array?
- 4. modo più veloce per query XML in Java
- 5. Il modo più veloce per ottenere l'accesso a Java?
- 6. Il modo più veloce per leggere a lungo [] dal file?
- 7. Il modo più veloce per scrivere enormi dati nel file
- 8. Il modo più veloce per copiare un elenco di array su un altro
- 9. Java Il modo più veloce per leggere il file di testo con 2 milioni di righe
- 10. un modo più veloce per scaricare più file
- 11. Java: il modo più efficace per copiare in modo difensivo un int []?
- 12. Il modo più veloce di leggere in 100.000 file .dat.gz
- 13. Il modo più veloce per scrivere enormi dati nel file di testo Java
- 14. Il modo più veloce ed efficiente per creare XML
- 15. Il modo più veloce per convertire T [,] in T [] []?
- 16. È questo il modo più veloce per raggruppare in Panda?
- 17. Il modo più veloce per le chiamate batch in WebGL
- 18. Il modo più veloce per invertire una stringa in C
- 19. Il modo più veloce per spostare l'immagine in OpenCV
- 20. Il modo più veloce per unificare un elenco in Python
- 21. Il modo più veloce per convertire stringhe in binario?
- 22. Il modo più veloce per eseguire file da 50k di file Excel in OpenPYXL
- 23. Il modo più veloce per verificare se esiste un oggetto
- 24. Il modo più veloce di leggere i byte in D2
- 25. Il modo più veloce per verificare se una stringa può essere analizzata in Double in Java
- 26. Il modo più veloce per scrivere dati durante la produzione
- 27. Il modo più veloce per rendere il sito web reattivo?
- 28. Il modo più veloce per determinare il minimo non zero
- 29. il modo più veloce per creare checksum per file di grandi dimensioni in python
- 30. Il modo più semplice per copiare/duplicare un database RethinkDB?
Stai facendo una specie di trasformazione sui file mentre li copi? Perché non usare solo le funzioni del filesystem del sistema operativo? –
No, non sto facendo nessuna trasformazione. Ma la gestione degli errori sarebbe molto più difficile quando si copiano più di 10.000 file e l'overhead di generare un thread di sistema quando si copiano file piccoli è troppo grande. – Mato
Ti consiglio di modificare la tua domanda per includere i vincoli che abbiamo scoperto. –