파일 분할 및 병합은 일반적인 요구 사항입니다. 예를 들어, 큰 파일을 업로드 할 때는 먼저 작은 조각으로 나눈 다음 병합하기 전에 서버로 전송할 수 있습니다. 많은 고급 분산 파일 시스템 (예 : Google의 GFS 및 Taobao의 TFS)에서 파일도 블록 장치에 따라 분할되거나 병합됩니다.
기본 아이디어를 살펴보십시오.
큰 파일이있는 경우 분할 크기를 지정하십시오 (예 : 1m으로 잘라)
step 1:
먼저, 원래 파일 크기와 세분화 크기에 따라 최종적으로 나뉘어진 작은 파일의 수를 계산하십시오.
step 2:
디스크 에서이 n 작은 파일을 만듭니다
3 단계 : 3 단계 :
여러 스레드를 열십시오 (스레드 수 = 분할 파일 수). 각 스레드에서 RandomAccessFile의 Seek 함수를 사용하여 원본 파일의 각 세그먼트의 첫 번째 위치에 대한 읽기 포인터를 찾은 다음 지정된 크기를 뒤로 읽고 (즉, 세그먼트 된 블록의 크기)를 읽고 해당 분할 파일을 작성하십시오. 멀티 스레드 프로세스는 병렬로 프로세스되므로 각각은 자체 작은 파일을 씁니다.
다음 코드는 파일을 여러 하위 파일로 분할하는 것입니다.
패키지 테스트 오; import java.io.file; import java.io.fileInputStream; import java.io.fileoutputStream; import java.util.Arrays; public class substream {public static void main (string [] args) {// 먼저 소스 파일 읽기 각각 int everysize = 100*1024; file ( "f : /test/test.txt"); // 파일 개체 분할 분할 (srcfile, everysize);} public static void splitfile (파일 srcfile, int everysize) {// 파일이 분할 요구 사항을 충족하는지 여부를 결정합니다 (srcfile.length () == 0) {remontimeexcement ( "); filecontent = new Byte [(int) srcfile.length ()]; try {// 파일 내용을 메모리에 읽습니다. filenputStream fis = new FileInputStream (srcfile); fis.Read (fileContent); fis.close ();} catch (e.printstacktrace ();} // 계산하십시오. if (fileContent.length earysize == 0) {filenumber = filecontent.length/everysize;} else {filenumber = filecontent.length/earlysize+1;} for (int i = 0; i <filenumber; i ++) {i ++) {string filename = srcfile.getname ()+"+"+"+"+"+". file (srcfile.getParent (), filename); // 현재 파일 경로 아래 분할 파일 생성 [] earlyContent; // 소스 파일 내용을 분할 파일에 복사합니다. arrays.copyofRange (FileContent, 각각*i, filecontent.length);} try {fileoutputStream fos = new FileOutputStream (fi); fos.write (everyContent); fos.close (); System.out.printf ( "출력 하위 플라이어 %S, 각 크기는 %d, %d/n ", fi.getabsolutefile (), fi.length (), earycontent.length);} catch (예외 e) {// todo : exception e.printstacktrace ();}}}}요약
위는 파일을 여러 하위 파일 코드 예제로 분할하는 것에 대한이 기사의 전체 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!