Hi Kevin,
I wanted to write to a text with delimiter='^A' file using bean IO. Have created customized class for this. Its working for me but Just wanted to know if there is any other way of doing this
package gsis.beanio;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import org.beanio.stream.RecordIOException;
import org.beanio.stream.RecordReader;
import org.beanio.stream.RecordWriter;
import org.beanio.stream.delimited.DelimitedParserConfiguration;
import org.beanio.stream.delimited.DelimitedRecordParserFactory;
import org.beanio.stream.delimited.DelimitedWriter;
public class GMSDelimitedRecordParserFactory extends DelimitedRecordParserFactory {
@Override
public RecordWriter createWriter(Writer out) throws IllegalArgumentException {
if (!(out instanceof BufferedWriter)) {
out = new BufferedWriter(out);
}
final BufferedWriter writer = (BufferedWriter) out;
return new GMSRecordWriter(writer,this);
}
}
class GMSRecordWriter extends DelimitedWriter
{
boolean escapeEnabled;
char delim ='|';
String recordTerminator = "-";
private Writer out;
char escapeChar ='\\';
String gmsdelimitor ;
String gmsAppender = "^";
public GMSRecordWriter(Writer out) {
this(out,'\t');
}
public GMSRecordWriter(Writer out, char delimiter) {
this(out, new DelimitedParserConfiguration(delimiter));
}
public GMSRecordWriter(Writer out, DelimitedParserConfiguration config) {
super(out,config);
this.out = out;
delim = config.getDelimiter();
System.out.println("finally----"+escapeChar);
if (config.getEscape() == null) {
escapeEnabled = false;
}
else {
escapeEnabled = true;
escapeChar = config.getEscape();
if (delim == escapeChar) {
throw new IllegalArgumentException("Delimiter cannot match the escape character");
}
}
recordTerminator = config.getRecordTerminator();
if (recordTerminator == null) {
recordTerminator = System.getProperty("line.separator");
}
}
@Override
public void write(Object value) throws IOException {
write((String[])value);
}
public void write(String[] record) throws IOException
{
gmsdelimitor = gmsAppender+delim;
if (escapeEnabled) {
int pos = 0;
for (String field : record) {
if (pos++ > 0)
out.write(gmsdelimitor);
char[] cs = field.toCharArray();
for (int i = 0, j = cs.length; i < j; i++) {
if (cs[i] == delim || cs[i] == escapeChar) {
out.write(escapeChar);
}
out.write(cs[i]);
}
}
}
else {
int pos = 0;
for (String field : record) {
if (pos++ > 0) {
out.write(gmsdelimitor);
}
out.write(field);
}
}
out.write(recordTerminator);
}
@Override
public void close() throws IOException {
out.close();
}
@Override
public void flush() throws IOException {
out.flush();
}
}