需求是这样的,我想要截获标准输出流,输出到另一个地方,同时希望保持原有的标准输出流不受影响,相当于把原有的输出流复制成了两份,有办法可以做到吗?
解决方案 »
- 求助高手指导:java从oracle 中读取blob字段转换成字符串后生成了各种字符
- resultSet中"first与beforeFirst,last与afterLast“中的区别。
- 怎么通过一个ID树形结构递归找出所有ID,并把这些ID写入一个list
- JAVA处理中英混合的字符串的问题,郁闷。
- 很多jsp页面上都用到含有相同的html元素、jsp标记和javascript的内容,java下是否有办法把它们做成可重用的独立模块?用什么技术?
- PhantomReference的应用时机?
- 怎样把文本文件中的中文词组(每个词组之间有空格做为分割符)写入mysql数据库的表中
- javac编译的时候正确,用java运行,出现如下错误:Exception in thread "main" java.lang.NoClassDefFoundError:f:\zhourui
- 很简单的问题,是不是ACCESS数据库,不支持下列方法?
- 求探讨一个“Java Socket”的代码试验规律总结。
- 如何用Swing编写界面,可以显示 各种格式的文件啊,比如pdf,doc等
- flash 读取 servlet 生成的xml 显示 undefined
BufferedReader br = new BufferedReader (~~~某个输入流 );
BufferedWriter bw = new BufferedWriter (~~~某个输出流 );
String line = "";
while( (line=br.readLine())!=null ){
System.out.println(line);//标准输出
bw.write(line);bw.flush();//其它输出流,如果其它输出流要作相应操作,那就对line切割,重组,查找之后再用bw写入就是了。
}
你说的内容比较绕,我理解你希望能用一个类似于 Writer 或 OutputStream 之类的输出,但是同时可以输出给两个目标,类似于输出的时候就做了克隆。比如同时将内容写进两个不同的文件,对么?如果我理解正确的话,你的要求,Java提供的标准类库没有此类实现。
需要你自己去包装原始的OutputStream,然后去重写相关的write方法,然后同时写入两个地方,类似于:
public class MyOutputStream extends OutputStream {
private OutputStream originOS;
private OutputStream otherOS;
public MyOutputStream (OutputStream originOS) {
this.originOS = originOS;
this.otherOS = new FileOutputStream("xxxxxxooooo");
} public void write(byte data) { // 类似这样,所有函数都需要重写
originOS.write(data); // 写入原始流
otherOS.write(data); // 写入新流
}
}
看你包装的目标,如果是OutputStream,则OutputStream所定义的函数都需要重写,否则就有可能漏杀。其实也不多,总共就3个函数:
void write(byte[] b) // 如果非要偷懒可以不重写这个,它是调用第二个实现的
void write(byte[] b, int off, int len)
void write(int b)
但是这个好像不符合楼主的问题了。楼主是想把一个输出流直接操作,改变方向。不过确实API中没有提供此方法。但是你的那个方法不是又new了一个新的流了吗??个人觉得是脱裤子放屁。
多此一举。