Преобразование Txt в csv с использованием пакета spring

#java #spring-batch

Вопрос:

Я хочу взять данные из файла txt и отправить их в файл csv. каким должен быть код в весеннем пакете. ниже приведен упомянутый код как для читателя, так и для писателя. пожалуйста, помогите . Я могу передавать csv в csv в весенней партии. каков точный код в читателе предметов.

 public class RecordsReader {   @Bean  public FlatFileItemReaderlt;Recordsgt; reader() {  FlatFileItemReaderlt;Recordsgt; reader = new FlatFileItemReaderlt;gt;();  reader.setResource(new FileSystemResource("C://output/pip-1.7.txt"));  reader.setLineMapper(getLineMapper());  reader.setLinesToSkip(1);  return reader;  }   private LineMapperlt;Recordsgt; getLineMapper() {  DefaultLineMapperlt;Recordsgt; lineMapper = new DefaultLineMapperlt;gt;();  DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();  lineTokenizer.setNames(Records.fields());  BeanWrapperFieldSetMapperlt;Recordsgt; fieldSetter = new BeanWrapperFieldSetMapperlt;gt;();  fieldSetter.setTargetType(Records.class);  lineMapper.setLineTokenizer(lineTokenizer);  lineMapper.setFieldSetMapper(fieldSetter);   return lineMapper;  }  }  

Комментарии:

1. Так в чем же ваша проблема? Есть какие-нибудь исключения, которые вы видите?

Ответ №1:

Ваш компоновщик будет выглядеть так —

 public class RecordsLineMapper implements LineMapperlt;Recordsgt; {    private static final Pattern PATTERN =  Pattern.compile(  "^(?lt;recordIdgt;[a-zA-Z0-9-]{0,20})"    "(?lt;value1gt;[a-zA-Z0-9-]{0,50})"    "$");   @Override  @NonNull  public Records mapLine(@NonNull String line, int lineNumber) {  // Match the Line  Matcher matcher = PATTERN.matcher(line);  if (!matcher.matches()) {  throw new IllegalArgumentException("Line at "   lineNumber   " does not match pattern");  }    Records records = new Records();  records.setRecordId(matcher.group("recordId"));  records.setValue1(matcher.group("value1"));  return records;  } }  

Компонент FlatFileItemReader выглядит следующим образом —

 @Bean @StepScope public FlatFileItemReaderlt;Recordsgt; recordsFlatFileItemReader(  RecordsLineMapper mapper) {  return new FlatFileItemReaderBuilderlt;Recordsgt;()  .name("records-reader")  .lineMapper(mapper)  .build(); }  

Теперь вы можете проверить запись в процессоре и добавить в нее запись.

Реализация Писателя

 @Bean @StepScope public FlatFileItemWriterlt;Recordsgt; recordsToCsvFileItemWriter(  @Qualifier("csvFile") File csvFile,  RecordsLineAggregator aggregator) { return new FlatFileItemWriterBuilderlt;Recordsgt;()  .name("records-to-csv-item-writer")  .saveState(false)  .resource(new FileSystemResource(csvFile))  .lineAggregator(aggregator)  .build();  }   public class RecordsLineAggregator implements LineAggregatorlt;Recordsgt; {   @Override  @NonNull  public String aggregate(Records item) {  return new StringJoiner(",")  .add(item.getRecordId())  .add(item.getValue1())  .toString();  }  }  

Комментарии:

1. извините, я не понял

2. как мне отредактировать свой код для чтения элементов.

3. Аналогичным образом я создал компонент reader и предоставил компоновщик.