es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Traducción de “Txt – to – csv utilizando Spring Batch”: Txt – a – csv utilizando Spring Batch

Quiero tomar los datos de un archivo txt y enviarlos a un archivo csv. ¿Cuál debería ser el código en Spring Batch? A continuación se muestra el código mencionado tanto para el lector como para el escritor. Por favor, ayúdame. Soy capaz de pasar de csv a csv en Spring Batch. ¿Cuál es el código exacto en el lector de elementos?

“`java
public class RecordsReader {

@Bean
public FlatFileItemReader<records> reader() {
FlatFileItemReader<records> reader = new FlatFileItemReader<>();
reader.setResource(new FileSystemResource("C://output/pip-1.7.txt"));
reader.setLineMapper(getLineMapper());
reader.setLinesToSkip(1);
return reader;
}

private LineMapper<records> getLineMapper() {
DefaultLineMapper<records> lineMapper = new DefaultLineMapper<>();
DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
lineTokenizer.setNames(Records.fields());
BeanWrapperFieldSetMapper<records> fieldSetter = new BeanWrapperFieldSetMapper<>();
fieldSetter.setTargetType(Records.class);
lineMapper.setLineTokenizer(lineTokenizer);
lineMapper.setFieldSetMapper(fieldSetter);

<pre><code>return lineMapper;
</code></pre>

}

}
“`

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para leer datos de un archivo txt y enviarlos a un archivo csv en Spring Batch, puedes modificar el código anterior con los siguientes cambios en el método lector:

    public class RecordsReader {
    
        @Bean
        public FlatFileItemReader<records> reader() {
            FlatFileItemReader<records> reader = new FlatFileItemReader<>();
            reader.setResource(new FileSystemResource("C://input/input.txt")); // reemplace con la ruta del archivo desde donde desea leer la entrada
            reader.setLineMapper(getLineMapper());
            reader.setLinesToSkip(1);
            return reader;
        }
    
        private LineMapper<records> getLineMapper() {
            DefaultLineMapper<records> lineMapper = new DefaultLineMapper<>();
            DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer(",");
            lineTokenizer.setNames(Records.fields());
    
            BeanWrapperFieldSetMapper<records> fieldSetter = new BeanWrapperFieldSetMapper<>();
            fieldSetter.setTargetType(Records.class);
    
            lineMapper.setLineTokenizer(lineTokenizer);
            lineMapper.setFieldSetMapper(fieldSetter);
    
            return lineMapper;
        }
    
    }
    

    Reemplace “C://input/input.txt” en el método lector() con la ruta del archivo desde donde desea leer el archivo txt. Además, agregue una “,” como delimitador en DelimitedLineTokenizer, ya que es un archivo CSV donde se enviarán los datos.

    A continuación, para escribir los datos en el archivo CSV, puedes usar el siguiente código de escritor:

    public class RecordsWriter {
    
        @Bean
        public FlatFileItemWriter<records> writer() {
            FlatFileItemWriter<records> writer = new FlatFileItemWriter<>();
            writer.setResource(new FileSystemResource("C://output/output.csv")); // reemplace con la ruta del archivo donde desea escribir la salida
            writer.setLineAggregator(getLineAggregator());
            writer.setHeaderCallback(getHeaderCallback());
            return writer;
        }
    
        private LineAggregator<records> getLineAggregator() {
            DelimitedLineAggregator<records> lineAggregator = new DelimitedLineAggregator<>();
            lineAggregator.setDelimiter(",");
            FieldExtractor<records> fieldExtractor = new BeanWrapperFieldExtractor<>();
            fieldExtractor.setNames(Records.fields());
            lineAggregator.setFieldExtractor(fieldExtractor);
            return lineAggregator;
        }
    
        private FlatFileHeaderCallback getHeaderCallback() {
            return new FlatFileHeaderCallback() {
                @Override
                public void writeHeader(Writer writer) throws IOException {
                    writer.write(String.join(",", Records.fields()));
                }
            };
        }
    
    }
    

    Reemplace “C://output/output.csv” en el método escritor() con la ruta del archivo donde desea escribir la salida CSV.

    Aquí, DelimitedLineAggregator se utiliza con “,” como delimitador para agregar los datos en el formato CSV. Además, FieldExtractor se utiliza para mapear los campos de la clase Records en el archivo CSV. Finalmente, se escribe el encabezado del archivo CSV utilizando FlatFileHeaderCallback.

    Con estos cambios, deberías poder leer los datos de un archivo txt y enviarlos a un archivo CSV usando Spring Batch.

Comments are closed.