У меня есть программа Spring Batch, которая читает из файла и записывает в базу данных.
Данные ограничены || (двойные трубы) и в конце строки разделитель отсутствует.
one||two||three||four
foo||bar||foo1||bar1
Проблема в том, что в конце каждой строки есть сотни пробелов перед символом конца строки.
Используя Ctrl + Q, I в текстовой панели показывает:
one||two||three||four.......................................
foo||bar||foo1||bar1...............
car||bike||tango||charlie..........................
Это выдает ошибку разбора в каждой строке ItemReader (org.springframework.batch.item.file.FlatFileItemReader)
Я не могу удалить пробелы вручную и нуждаюсь в некоторой автоматизации, чтобы перед чтением файла программой Spring batch пробелы исчезли.
Как это сделать?
Примечание. Ошибка возникает только при запуске программы на сервере Unix. Это не происходит на окнах.
<beans:bean id="myBufferedReaderFactory" class="com.mypackage.MyBufferedReaderFactory"/>
<beans:bean id="FileToDBItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
<beans:property name="BufferedReaderFactory" ref="myBufferedReaderFactory"/>
<beans:property name="resource" ref="MyInputFileResource" />
<beans:property name="lineMapper">
<beans:bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<beans:property name="lineTokenizer">
<beans:bean class="com.mypackage.MyCustomLineTokenizer">
<beans:property name="delimiter" value="||"/>
<beans:property name="names" value="one,two,three,four" />
</beans:bean>
</beans:property>
<beans:property name="fieldSetMapper">
<beans:bean class="com.mypackage.MyFieldSetMapper" />
</beans:property>
</beans:bean>
</beans:property>
</beans:bean>
Прогрессировал немного. Но до сих пор не ударил ответ.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.springframework.batch.item.file.BufferedReaderFactory;
import org.springframework.core.io.Resource;
public class MyBufferedReaderFactory implements BufferedReaderFactory {
public BufferedReader create(final Resource resource, final String encoding) throws UnsupportedEncodingException, IOException {
InputStream sourceStream = null;
sourceStream = resource.getInputStream();
//code to remove trailing spaces end
//code to remove trailing spaces start
return new BufferedReader(new InputStreamReader(sourceStream, encoding));
}
}
Как я могу удалить завершающие пробелы, используя объект InputStream в вышеприведенном классе ??
Спасибо за чтение !!