Java usa la transmisión IO para realizar la segmentación y la fusión de archivos grandes
La segmentación de archivos debe ser una función más práctica. Por ejemplo, si tiene un archivo 3G que necesita ser copiado de una computadora a otra, pero su dispositivo de almacenamiento (como una tarjeta SD) es solo 1G. En este momento, puede cortar el archivo en 3 archivos 1G, copiarlos por separado y finalmente fusionar los tres archivos, lo que resuelve el problema. Por ejemplo, tiene un archivo de cientos de m para cargar a FTP, pero este FTP limita su archivo único para que no exceda los 10 m. En este momento, también puede usar la segmentación de archivos para resolver el problema. Como está dividido, debemos fusionarnos cuando lo usamos nuevamente. Hoy implementaremos la capacidad de división y fusión de archivos a través del código Java.
Ahora, lo demostraremos demostrando un archivo de mi máquina. El directorio de archivos es: e: /eClipse-jee-juno-win32.zip (hoy me divertiré con el eclipse que todos odian):
La siguiente figura muestra la situación antes de la segmentación:
La situación tras la división es:
Cómo dividir archivos en Java:
// El método de división de archivos (pase la ruta del archivo que se dividirá y el número de copias que se dividirán en el método) privado void void splitfiledemo (archivo src, int m) {if (src.isfile ()) {// Obtenga la longitud total del archivo long l = src.length (); // Obtenga el nombre de archivo String FileName = src.getName (). Substring (0, src.getName (). IndexOf (".")); // Obtenga la cadena de sufijo de archivo endName = src.getName (). Substring (src.getName (). LastIndexOf (".")); System.out.println (EndName); InputStream in = null; intente {in = new FileInputStream (SRC); for (int i = 1; i <= m; i ++) {stringBuffer sb = new StringBuffer (); sb.append (src.getParent ()). append (nombre de archivo) .append ("_ data"). append (i) .append (endname); System.out.println (sb.ToString ()); Archivo file2 = nuevo archivo (sb.toString ()); // Cree la transmisión de salida para escribir archivos outputStream out = new FileOutputStream (file2); int len = -1; byte [] bytes = new Byte [10*1024*1024]; while ((len = in.read (bytes))! =-1) {out.write (bytes, 0, len); if (file2.length ()> (l / m)) {break; }} out.close (); }} catch (Exception e) {E.PrintStackTrace (); } finalmente {try {in.close (); } catch (ioException e) {E.PrintStackTrace (); }}}} Archivos de fusión de Java:
// Método de fusión de archivos (pasar en la ruta del archivo para fusionar) Private static void JoinfileDemo (String ... src) {for (int i = 0; i <src.length; i ++) {file file = new File (src [i]); String filename = file.getName (). Sustring (0, file.getName (). IndexOf ("_")); String endName = file.getName (). Substring (file.getName (). LastIndexOf (".")); StringBuffer sb = new StringBuffer (); sb.append (file.getParent ()). append ("//"). append (nombre de archivo) .append (endname); System.out.println (sb.ToString ()); Pruebe {// lea el flujo de entrada de los archivos pequeños Entrystream in = new FileInputStream (archivo); // Escribir la transmisión de salida del archivo de archivos grandes file2 = nuevo archivo (sb.toString ()); OutputStream out = new FileOutputStream (file2, true); int len = -1; byte [] bytes = new Byte [10*1024*1024]; while ((len = in.read (bytes))! =-1) {out.write (bytes, 0, len); } out.close (); cercar(); } catch (Exception e) {E.PrintStackTrace (); }} System.out.println ("¡Fusione de archivo se completa!");}Pensé que era bastante complicado antes de escribir, pero después de escribirlo, pensé que era solo eso. Puedes practicar tus habilidades.
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!