Divisão de arquivos de texto em partes iguais

4 respostas
W

Boa Tarde Gente,

Estou trabalhando em projeto, e eu preciso dividir um arquivo de texto em partes iguais, eu tenho um algoritmo que ler e imprime o texto na tela do netbeans, eu quero poder dividir esse texto em partes iguais, por exemplo um arquivo txt de 10MB, quero dividi-lo em 5MB e 5MB, assim eu vou poder processar 5MB em uma máquina e 5MB em outra usando distribuição. quem poder me ajudar com tutoriais, algoritmos e sites relacionados agradeço.

4 Respostas

D

Você sabe o tamanho.
A metade é só dividir o tamanho por 2.
Percorra o arquivo até chegar na metade e vá guardando em um arquivo. Chegou na metade, passe a guardar em outro arquivo.
Generalize isso e você conseguirá dividir o arquivo em quantas partes quiser.

[]'s

D

Fiz bem rápido... Você pode melhorar várias coisas, mas o caminho é esse.

Dá uma olhada:
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;

/**
 *
 * @author David Buzatto
 */
public class Foo {
    
    public static void main( String[] args ) {
        
        try {
            
            File inFile = new File( "C:/x.txt" );
            FileReader fr = new FileReader( inFile );
            
            long tamanhoTotal = Files.size( inFile.toPath() );
            int quantidade = 2;
            
            long tamanhoPorArquivo = tamanhoTotal / quantidade;
            long tamanhoUltimoArquivo = tamanhoPorArquivo + (tamanhoTotal % quantidade);
            long maximo;
            
            for ( int i = 0; i < quantidade; i++ ) {
                
                if ( i == quantidade - 1 ) {
                    maximo = tamanhoUltimoArquivo;
                } else {
                    maximo = tamanhoPorArquivo;
                }
                
                File arquivoAtual = new File( "C:/p" + i + ".txt" );
                FileWriter fw = new FileWriter( arquivoAtual );
                
                for ( int j = 0; j < maximo; j++ ) {
                    fw.write( fr.read() );
                }
                
                fw.close();
                
            }
            
            fr.close();
            
        } catch ( IOException exc ) {
            exc.printStackTrace();
        }
        
    }
    
}

[]'s

W

Fiz o teste e deu certo, muito obrigado pela segunda vez, o que você acha que devo melhorar no seu algoritmo para deixa-lo mais robusto? não quero que faça só me mostre o caminho, se não fica muito facil…rs…mais uma vez obrigado!

D

O caso nem é deixar mais robusto, mas deixar mais genérico.

Por exemplo, criar um método que faça o serviço, com um parâmetro para representar o arquivo de entrada, um para estipular em quantas partes se quer dividir o arquivo. Os arquivos de saída também podem ser gerados com base no diretório do arquivo de entrada definido. Essas coisas entendeu? Deixando mais genérico vc pode reaproveitar em outros projetos.

[]'s

Criado 31 de janeiro de 2012
Ultima resposta 31 de jan. de 2012
Respostas 4
Participantes 2