Java utilise IO Stream pour réaliser la segmentation et la fusion de fichiers volumineux
La segmentation des fichiers doit être une fonction plus pratique. Par exemple, si vous avez un fichier 3G qui doit être copié d'un ordinateur à un autre, mais votre périphérique de stockage (comme une carte SD) n'est que 1 g. À l'heure actuelle, vous pouvez couper le fichier en 3 fichiers 1G, les copier séparément et enfin fusionner les trois fichiers, ce qui résout le problème. Par exemple, vous avez un fichier de centaines de m à télécharger sur FTP, mais ce FTP limite votre seul fichier pour ne pas dépasser 10 m. Pour le moment, vous pouvez également utiliser la segmentation des fichiers pour résoudre le problème. Puisqu'il est divisé, nous devons fusionner lorsque nous l'utilisons à nouveau. Aujourd'hui, nous implémenterons la possibilité de séparer les fichiers et de fusionner via le code Java.
Maintenant, nous allons démontrer en démontrant un fichier de ma machine. Le répertoire de fichiers est: e: /eclipse-jee-juno-win32.zip (aujourd'hui je vais m'amuser avec l'éclipse que tout le monde déteste):
La figure suivante montre la situation avant la segmentation:
La situation après la division est:
Comment diviser les fichiers en Java:
// La méthode de division de fichiers (passez le chemin du fichier à diviser et le nombre de copies à diviser dans la méthode) privé static void SplitFiledo (Fichier Src, int m) {if (src.isfile ()) {// Obtenez la longueur totale du fichier long l = src.length (); // obtient le nom de file String filename = src.getName (). Substring (0, src.getName (). Indexof (".")); // obtient le fichier suffixe string endname = src.getName (). Substring (src.getName (). LastIndexof (".")); System.out.println (endname); InputStream dans = null; try {in = new FileInputStream (src); pour (int i = 1; i <= m; i ++) {StringBuffer sb = new StringBuffer (); SB.APPEND (src.GetParent ()). APPEND (nom de fichier) .append ("_ data"). APPEND (i) .Apnd (endname); System.out.println (sb.toString ()); Fichier file2 = nouveau fichier (sb.toString ()); // Créer le flux de sortie pour écrire des fichiers OutputStream out = new FileOutputStream (file2); int len = -1; octet [] octets = nouveau octet [10 * 1024 * 1024]; while ((len = in.read (bytes))! = - 1) {out.write (octets, 0, len); if (file2.length ()> (l / m)) {break; }} out.close (); }} catch (exception e) {e.printStackTrace (); } enfin {try {in.close (); } catch (ioException e) {e.printStackTrace (); }}}} Java Merge Fichiers:
// Méthode de fusion de fichiers (passez dans le chemin du fichier pour fusionner) privé static void joinFileemo (string ... src) {for (int i = 0; i <src.length; i ++) {file file = new file (src [i]); String filename = file.getName (). Substring (0, file.getName (). Indexof ("_")); String endname = file.getName (). Substring (file.getName (). LastIndexof (".")); StringBuffer sb = new StringBuffer (); sb.append (file.getParent ()). APPEND ("//"). APPEND (FileName) .Apnd (endname); System.out.println (sb.toString ()); essayez {// lire le flux d'entrée de petits fichiers InputStream dans = new FileInputStream (fichier); // Écrivez le flux de sortie du fichier de fichiers de gros fichiers Fichier2 = nouveau fichier (sb.toString ()); OutputStream out = new FileOutputStream (file2, true); int len = -1; octet [] octets = nouveau octet [10 * 1024 * 1024]; while ((len = in.read (bytes))! = - 1) {out.write (octets, 0, len); } out.close (); joindre(); } catch (exception e) {e.printStackTrace (); }} System.out.println ("La fusion de fichiers est terminée!");}Je pensais que c'était assez compliqué avant d'écrire, mais après l'avoir écrit, je pensais que c'était juste ça. Vous pouvez pratiquer vos compétences.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!