Могу ли я использовать SpringBatch для передачи файла (видео /txt), присутствующего в http, и чтения его и записи на моем компьютере?

Прямо сейчас я пытаюсь записать http-файл (пример:"https://www.w3.org/TR/PNG/iso_8859-1.txt") на свой локальный компьютер с помощью springBatch. Но не могу прочитать файл. Мой файл Reader выглядит следующим образом:

public FlatFileItemReader<String> reader(){
   FlatFileItemReader<String> reader = new FlatFileItemReader<String>();
   reader.setResource(new UrlResource("https://www.w3.org/TR/PNG/iso_8859-1.txt"));
   reader.setRecordSeparatorPolicy(new RecordSeparatorPolicy() {
            @Override
            public boolean isEndOfRecord(String s) {
                if (s.length() == 100)
                    return true;
                return false;
            }

            @Override
            public String postProcess(String s) {
                return s;
            }

            @Override
            public String preProcess(String s) {
                return s;
            }
        });
   return reader;
}

Я читаю 100 блоков длины из ввода и передаю их писателю. Но я получаю эту ошибку:

org.springframework.batch.item.file.FlatFileParseException: Unexpected end of file before record complete
    at org.springframework.batch.item.file.FlatFileItemReader.applyRecordSeparatorPolicy(FlatFileItemReader.java:303) ~[spring-batch-infrastructure-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.batch.item.file.FlatFileItemReader.readLine(FlatFileItemReader.java:220) ~[spring-batch-infrastructure-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.batch.item.file.FlatFileItemReader.doRead(FlatFileItemReader.java:178) ~[spring-batch-infrastructure-4.2.4.RELEASE.jar:4.2.4.RELEASE]
...

Как прочитать полный файл.txt из http, обработать и записать его в желаемое место?

И что, если вместо txt файла я передам в ридер видеофайл (какой в этом случае должен быть тип FlatFileItemReader< ???>?

1 ответ

Решение

Вам не нужна эта настраиваемая политика разделителя записей, вы можете использовать PassThroughLineMapper вместо.

И что, если вместо txt файла я передам на ридер видеофайл (каким в этом случае должен быть тип FlatFileItemReader?

Вы можете использовать byte[]в качестве типа элемента или используйте SimpleBinaryBufferedReaderFactory.

Другие вопросы по тегам