Dateisegmentierung und Verschmelzung sind eine häufige Anforderung. Zum Beispiel: Beim Hochladen großer Dateien können sie zuerst in kleine Stücke unterteilt und dann vor dem Zusammenführen auf den Server übertragen werden. In vielen hochwertigen verteilten Dateisystemen (wie der GFS von Google und Taobao) werden auch Dateien entsprechend Blockeinheiten geteilt oder verschmolzen.
Schauen Sie sich die grundlegenden Ideen an:
Wenn es eine große Datei gibt, geben Sie die geteilte Größe an (z. B. um 1 m geschnitten).
Schritt 1:
Berechnen Sie zunächst die Anzahl kleiner Dateien, die schließlich basierend auf der ursprünglichen Dateigröße und der Segmentierungsgröße geteilt werden.
Schritt 2:
Erstellen Sie diese n kleinen Dateien auf der Festplatte
Schritt 3:
Öffnen Sie mehrere Threads (Anzahl der Threads = Anzahl der geteilten Dateien). Verwenden Sie in jedem Thread die Suchfunktion von RandomAccessfile, um den Lesezeiger auf die erste Position jedes Segments in der Originaldatei zu lokalisieren, und lesen Sie dann die angegebene Größe rückwärts (d. H. Die Größe des segmentierten Blocks) und schreiben Sie schließlich die entsprechende Split -Datei. Da Multi-Threads parallel vorgehen, schreibt jeder eine eigene kleine Datei, die relativ schnell ist.
Der folgende Code besteht darin, eine Datei in mehrere Teildateien mit jeweils eine Größe von 100 km aufzuteilen
Paket testio; import java.io.file; import java.io.fileinputstream; import Java.io.fileOutputStream; importieren java.util.arrays; öffentliche Klasse Substream {public static void main (String [] args) {// Die Quelldatei in der Memory First Int EverySize = 100*1024; Datei ("f: /test/test.txt"); // eine Dateiobjekt -Split -Datei erstellen (srcFile, EverSize);} public static void splitfile (Datei srcFile, int EverSize) {// Bestimmen Sie, ob die Datei die aufgeteilten Anforderungen erfüllt, wenn (srcFile.lenlänge (). fileContent = new byte [(int) srcFile.length ()]; try {// den Dateiinhalt in SpeicherdateieinputStream fis = new FileInputStream (srcFile); fis.read (filecontent); fileNumber; if (filecontent.length%Eversize == 0) {FileNumber = fileContent.length/EverSize;} else {fileNumber = fileContent.length/EverSize+1;} für (int i = 0; i <fileNumber; i ++) {String filename = srcFile. Datei (srcFile.getParent (), fileName); // Erstellen einer geteilten Datei unter dem aktuellen Dateipfad-Byte [] JedesContent; // den Quelldateiinhalt in die geteilte Datei kopieren, wenn (i! = Dateieinzahl-1) {EveryContent = Arrays.CopyoFrange (Filecontent, EverySize*ISIZE*(ISSIZE*(I+1)); Arrays.copyofrange (filecontent, EverSize*i, filecontent.length);} try {FileOutputStream fos = new FileOutputStream (FI); FOS.Write (jeder Anschluss); fos.close (); %d/n ", fi.getabSoluteFile (), fi.length (), jederContent.length);} catch (Ausnahme E) {// Todo: Ausnahme von Ausnahme E. printstacktrace ();}}}}Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über die Aufteilung einer Datei in mehrere Subfile -Code -Beispiele. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!