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

Exemplo de código para dividir um arquivo em vários arquivos filhos usando java IO

Divisão e combinação de arquivos é uma necessidade comum, por exemplo: ao enviar grandes arquivos, pode-se dividir primeiro em pequenos blocos, enviar para o servidor e então combiná-los. Muitos sistemas de arquivos distribuídos de alta qualidade (como o GFS do Google, o TFS do Taobao) também dividem ou combinam arquivos em unidades de bloco.

Veja a ideia básica:

Se houver um grande arquivo, após especificar o tamanho de divisão (por exemplo, por1Corte M)

passo 1:

Primeiro, baseado no tamanho do arquivo original e no tamanho de divisão, calcule o número final de arquivos divididos N

passo 2:

Cria esses N pequenos arquivos no disco

passo 3:

Abre várias threads (número de threads = número de arquivos divididos), em cada thread, usa a função seek do RandomAccessFile para posicionar o ponteiro de leitura na posição inicial de cada seção do arquivo original, e então ler o tamanho especificado para frente (ou seja, o tamanho do bloco de divisão), finalmente escrevendo no arquivo dividido correspondente, porque o processamento paralelo de várias threads, cada uma escreve seus próprios pequenos arquivos, a velocidade é relativamente rápida.

O código a seguir é para dividir um arquivo em vários arquivos filhos, cada um com tamanho100K

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) {
		//Primeiro, leia o arquivo-fonte para a memória 
		int eachSize=100*1024;
		File srcFile =new File("F:",/test/test.txt");
		//Criar um objeto arquivo 
		splitFile(srcFile,eachSize);
	}
	public static void splitFile(File srcFile,int eachSize){
		//Verificar se o arquivo atende aos requisitos de divisão 
		if(srcFile.length()==0){
			throw new RuntimeException("O arquivo não atende aos requisitos de divisão");
		}
		byte[] fileContent= new byte[(int) srcFile.length()];
		try {
			//Ler o conteúdo do arquivo para a memória 
			FileInputStream fis=new FileInputStream(srcFile);
			fis.read(fileContent);
			fis.close();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		//Calcular quantas partes precisam ser divididas 
		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);
			//Criar o arquivo dividido na pasta de caminho atual 
			byte[] eachContent;
			//Copiar o conteúdo do arquivo original para os arquivos divididos 
			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("Saída do subarquivo %s, seu tamanho é %d, cada um é %d\n", fi.getAbsoluteFile(), fi.length(), eachContent.length);
			}
			catch (Exception e) {
				// TODO: lidar com exceção 
				e.printStackTrace();
			}
		}
	}
}

Resumo

Isso é tudo sobre o exemplo de código de Java IO para dividir um arquivo em vários arquivos filhos. Espero que ajude. Amigos interessados podem continuar a ler outros tópicos relacionados neste site, e são bem-vindos a deixar sugestões. Agradecemos o apoio dos amigos ao site!

Declaração: O conteúdo deste artigo é de origem na internet, pertence ao respectivo detentor dos direitos autorais, foi submetido e carregado voluntariamente pelos usuários da internet, este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade por questões legais relacionadas. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas relevantes. Apenas ao confirmar, o site deletará imediatamente o conteúdo suspeito de violação de direitos autorais.)

Você também pode gostar