English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

java IO 스트림을 통해 파일을 여러个子 파일로 분할하는 코드 예제

파일 분할 및 결합은 일반적인 요구 사항입니다. 예를 들어: 큰 파일을 업로드할 때, 먼저 작은 부분으로 분할하고, 서버에 전송한 후 결합할 수 있습니다. 많은 고급 분산 파일 시스템(예: google의 GFS, taobao의 TFS)에서도 블록 단위로 파일을 분할하거나 결합합니다.

기본적인 방법을 보여드립니다:

빅 파일이 하나 있다면, 지정된 분할 크기 후(예를 들어:1M切开

단계 1:

원본 파일 크기와 분할 크기에 따라 최종 분할된 작은 파일 수 N을 계산합니다

단계 2:

디스크에 이 N개의 작은 파일을 생성합니다

단계 3:

여러 스레드(스레드 수=파일 분할 수)를 열고, 각 스레드에서 RandomAccessFile의 seek 기능을 사용하여 원본 파일의 각 단계의 단계之首 위치를 정의하고, 그 다음 지정된 크기(즉: 분할 블록 크기)를 읽고, 결국 해당 분할 파일에 쓰면 됩니다. 다중 스레드 병행 처리로 각 작은 파일을 별도로 쓰기 때문에, 속도는 상대적으로 매우 빠르다는 점이 특징입니다.

아래 코드는 파일을 여러个子 파일로 분할하는 코드입니다. 각 파일의 크기는}}100K

package testIO;
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 eachSize=100*1024;
		File srcFile =new File("F:",/test/test.txt");
		//파일 객체를 생성합니다 
		splitFile(srcFile,eachSize);
	}
	public static void splitFile(File srcFile,int eachSize){
		//파일이 분할 요구에 맞는지 확인합니다 
		if(srcFile.length()==0){
			throw new RuntimeException("파일 분할 요구에 맞지 않습니다");
		}
		byte[] fileContent= new byte[(int) srcFile.length()];
		try {
			//파일 내용을 메모리에 읽어들입니다 
			FileInputStream fis=new FileInputStream(srcFile);
			fis.read(fileContent);
			fis.close();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		//계산해야 할 주어진 파일을 얼마나 많은 부분으로 분할해야 할지 
		int fileNumber;
		if(fileContent.length%eachSize==0){
			fileNumber = fileContent.length/eachSize;
		} else{
			fileNumber = fileContent.length/eachSize+1;
		}
		for (int i=0;i<fileNumber;i++){
			String fileName = srcFile.getName()+"-"+i+".txt";
			File fi = new File(srcFile.getParent(), fileName);
			//현재 파일 경로 아래에 분할된 파일을 생성합니다 
			byte[] eachContent;
			//원본 파일 내용을 분할된 파일에 복사합니다 
			if(i!=fileNumber-1){
				eachContent = Arrays.copyOfRange(fileContent, eachSize*i, eachSize*(i+1));
			} else{
				eachContent = Arrays.copyOfRange(fileContent, eachSize*i, fileContent.length);
			}
			try {
				FileOutputStream fos = new FileOutputStream(fi);
				fos.write(eachContent);
				fos.close();
				System.out.printf("출력된 서브 파일 %s, 그 크기는 %d, 각각의 크기는 %d\n", fi.getAbsoluteFile(), fi.length(), eachContent.length);
			}
			catch (Exception e) {
				// TODO: 예외 처리 
				e.printStackTrace();
			}
		}
	}
}

결론

이것이 java IO 스트림을 하나의 파일을 여러个子 파일로 분할하는 코드 예제의 전체 내용입니다. 많은 도움이 되었기를 바랍니다. 관심이 있는 분은 이 사이트의 다른 관련 주제를 참고할 수 있으며, 부족한 점이 있으면 의견을 남겨 주시기 바랍니다. 친구들의 이 사이트에 대한 지지에 감사합니다!

선언: 이 문서의 내용은 인터넷에서 가져왔으며, 원저자에게 속합니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공 편집 처리를 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 위반 내용을 발견하면, 메일을 notice#w로 보내 주시기 바랍니다.3codebox.com(메일을 보내면, #을 @으로 변경하십시오. 신고를 해 주시고, 관련 증거를 제공하십시오. 확인되면, 이 사이트는 즉시 위반 내용을 삭제합니다.)

추천해드립니다