package org.molgenis.gavin.job.input;
import org.slf4j.Logger;
import java.io.*;
import java.util.function.Consumer;
import static org.slf4j.LoggerFactory.getLogger;
/**
* Writes lines to file.
*/
public class LineSink implements Consumer<String>, Closeable
{
private final static Logger LOG = getLogger(LineSink.class);
private final File file;
private BufferedWriter writer;
public LineSink(File file)
{
this.file = file;
}
@Override
public void accept(String line)
{
try
{
if (writer == null)
{
writer = createWriter(file);
}
writer.write(line);
writer.newLine();
}
catch (IOException ex)
{
LOG.error("Failed to write line to file {}.", file.getAbsolutePath(), ex);
}
}
private BufferedWriter createWriter(File file) throws IOException
{
LOG.debug("Creating LineSink for {}.", file.getAbsolutePath());
return new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
}
@Override
public void close() throws IOException
{
if (writer != null)
{
LOG.debug("Closing LineSink for {}.", file.getAbsolutePath());
writer.close();
}
}
}