I want to show how I implemented filter output stream that send data to multiple underlying streams.
It is very easy.
I need output stream for this
import java.io.FilterOutputStream;import java.io.IOException;import java.io.OutputStream;public class MultitargetOutputStream extends FilterOutputStream{ private OutputStream outputStream_1; private OutputStream outputStream_2; public MultitargetOutputStream(OutputStream outputStream1,OutputStream outputStream2){ super(outputStream1); outputStream_1 = outputStream1; outputStream_2 = outputStream2; } @Override public void write(int b) throws IOException{ outputStream_1.write(b); outputStream_2.write(b); } @Override public void write(byte[] data,int offset,int length) throws IOException{ outputStream_1.write(data,offset,length); outputStream_2.write(data,offset,length); } @Override public void flush() throws IOException{ outputStream_1.flush(); outputStream_2.flush(); } @Override public void close() throws IOException{ outputStream_1.close(); outputStream_2.close(); }}As you can see I extended FilterOutputStream
Main class:
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class Main{ public static void main(String[] args) throws IOException{ String workDir = System.getProperty("user.dir"); File fileDir = new File(workDir,"src/com/thedevelopersinfo/tutorial/java/io/filterstreams/multitargetingoutputstreamexample"); File readFile = new File(fileDir,"Main.java"); FileInputStream fileInputStream = new FileInputStream(readFile); FileOutputStream fileOutputStream_1 = new FileOutputStream(new File(fileDir,"copy1.txt")); FileOutputStream fileOutputStream_2 = new FileOutputStream(new File(fileDir,"copy2.txt")); MultitargetOutputStream multitargetOutputStream = new MultitargetOutputStream(fileOutputStream_1,fileOutputStream_2); copyData(fileInputStream,multitargetOutputStream); fileInputStream.close(); multitargetOutputStream.close(); } public static void copyData(InputStream inputStream,OutputStream outputStream) throws IOException{ BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream); while (true){ int data = bufferedInputStream.read(); if (data == -1){break; } bufferedOutputStream.write(data); } bufferedOutputStream.flush(); }}As you can see it is very easy. Try this example and you should find at directory where is located the Main.java 2 new files with Main.java’s content.
Download code from this post.
No related posts.

Recent Comments