Java usa o fluxo de IO para realizar a segmentação e a fusão de arquivos grandes
A segmentação de arquivos deve ser uma função mais prática. Por exemplo, se você possui um arquivo 3G que precisa ser copiado de um computador para outro, mas seu dispositivo de armazenamento (como um cartão SD) é de apenas 1G. No momento, você pode cortar o arquivo em 3 arquivos 1G, copiá -los separadamente e, finalmente, mesclar os três arquivos, o que resolve o problema. Por exemplo, você tem um arquivo de centenas de M para fazer upload para o FTP, mas isso limita o seu arquivo único a não exceder 10m. No momento, você também pode usar a segmentação de arquivos para resolver o problema. Como está dividido, precisamos mesclar quando o usamos novamente. Hoje, implementaremos a capacidade de dividir e fusão de arquivos através do código Java.
Agora, demonstraremos demonstrando um arquivo da minha máquina. O diretório de arquivos é: e: /clipse-jee-juno-win32.zip (hoje vou me divertir com o eclipse que todo mundo odeia):
A figura a seguir mostra a situação antes da segmentação:
A situação após a divisão é:
Como dividir arquivos em java:
// O método de divisão de arquivos (passe no caminho do arquivo a ser dividido e o número de cópias a serem divididas no método) privado estático void splitfiledemo (arquivo src, int m) {if (src.isfile ()) {// obtém o comprimento total do arquivo Long l = src.lengthngth (); // Obtenha o nome do arquivo string filename = src.getName (). Substring (0, src.getName (). Indexof ("."); // Obtenha o arquivo de sufixo string endname = src.getName (). Substring (src.getName (). LastIndexOf (".")); System.out.println (EndName); InputStream in = null; tente {in = new FileInputStream (src); for (int i = 1; i <= m; i ++) {stringbuffer sb = new StringBuffer (); sb.append (src.getParent ()). Append (FileName) .Append ("_ Data"). Append (i) .Append (EndName); System.out.println (sb.toString ()); Arquivo file2 = novo arquivo (sb.toString ()); // Crie o fluxo de saída para gravar arquivos outputStream Out = new FileOutputStream (File2); int len = -1; byte [] bytes = novo byte [10*1024*1024]; while ((len = in.read (bytes))! =-1) {out.write (bytes, 0, len); if (file2.Length ()> (l / m)) {break; }} out.close (); }} catch (Exceção e) {e.printStackTrace (); } finalmente {try {in.close (); } catch (ioexception e) {e.printStackTrace (); }}}} Java Merge Arquivos:
// Método de fusão de arquivos (passe no caminho do arquivo para mesclar) private estático void junçãofiledemo (string ... src) {for (int i = 0; i <src.length; i ++) {arquivo file = novo arquivo (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) .Append (EndName); System.out.println (sb.toString ()); tente {// leia o fluxo de entrada de pequenos arquivos inputStream in = new FileInputStream (FILE); // Escreva o fluxo de saída do arquivo de arquivos grandes arquivo2 = novo arquivo (sb.toString ()); OutputStream out = new FileOutputStream (File2, true); int len = -1; byte [] bytes = novo byte [10*1024*1024]; while ((len = in.read (bytes))! =-1) {out.write (bytes, 0, len); } out.close (); in.Close (); } catch (Exceção e) {e.printStackTrace (); }} System.out.println ("A mesclagem de arquivo está concluída!");}Eu pensei que era bastante complicado antes de escrever, mas depois de escrevê -lo, pensei que era exatamente isso. Você pode praticar suas habilidades.
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!