您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > JAVA之旅(三十)
JAVA之旅(三十)一.打印流PrintWriter打印流有PrintWriter和PrintStream,他的特点可以直接操作输入流还有文件该流提供了打印方法,可以将各种数据类型原样打印file对象File字符串路径String字节打印流字符打印流我们演示一遍大家就对此有所了解了packagecom.lgl.hellojava;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;publicclassHelloJJAVA{publicstaticvoidmain(String[]args){try{BufferedReaderbufr=newBufferedReader(newInputStreamReader(System.in));PrintWriteroWriter=newPrintWriter(System.out,true);Stringline=null;while((line=bufr.readLine())!=null){if(line.equals(over)){break;}oWriter.write(line);}oWriter.close();bufr.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}要想存到文件里,也是可以直接把文件给放进去的二.合并流我们来看看什么是合并流,在API文档上说,他可以串联流packagecom.lgl.hellojava;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.SequenceInputStream;importjava.util.Enumeration;importjava.util.Vector;publicclassHelloJJAVA{publicstaticvoidmain(String[]args){try{VectorFileInputStreamv=newVectorFileInputStream();v.add(newFileInputStream(1.txt));v.add(newFileInputStream(2.txt));EnumerationFileInputStreamelements=v.elements();SequenceInputStreamsis=newSequenceInputStream(elements);FileOutputStreamfos=newFileOutputStream(3.txt);byte[]buf=newbyte[1024];intlen=0;while((len=sis.read(buf))!=-1){fos.write(buf,0,len);}fos.close();sis.close();}catch(FileNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}把1.txt和2.txt乃至add更多的内容合并到3.txt文件中,这就是流的合并三.切割文件合并文件可以,那肯定可以切割了,我们来看下具体是怎么去制作的//切割文件publicstaticvoidsplitFile(){try{FileInputStreamfis=newFileInputStream(1.jpg);FileOutputStreamfos=null;byte[]buf=newbyte[1024*1024];intlen=0;intcount=1;while((len=fis.read(buf))!=-1){fos=newFileOutputStream((count++)+.patch);fos.write(buf,0,len);fos.close();}fis.close();}catch(FileNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}当运行结束之后,我们可以看到已经成功切割了切割完我们可以合并了//合并文件publicstaticvoidmerge(){ArrayListFileInputStreamal=newArrayList();for(inti=1;i=2;i++){try{al.add(newFileInputStream(i+.patch));}catch(FileNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}IteratorFileInputStreamiterator=al.iterator();EnumerationFileInputStreamen=newEnumerationFileInputStream(){@OverridepublicbooleanhasMoreElements(){//TODOAuto-generatedmethodstubreturniterator.hasNext();}@OverridepublicFileInputStreamnextElement(){//TODOAuto-generatedmethodstubreturniterator.next();}};try{SequenceInputStreamseq=newSequenceInputStream(en);FileOutputStreamfos=newFileOutputStream(2.jpg);byte[]buf=newbyte[1024];intlen=0;while((len=seq.read(buf))!=-1){fos.write(buf,0,len);}fos.close();seq.close();}catch(FileNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}这样我们就把图片拷贝出来了,可以看到这段代码是非常帮的,我们一定会用到的,希望能用的上四.对象的序列化Serializable其实就是可以直接操作对象的流,他会实现一个Serializable()接口,我们用代码来看下他是怎么用的,我们直接写读取对象的类了packagecom.lgl.hellojava;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.io.Serializable;publicclassHelloJJAVA{publicstaticvoidmain(String[]args){//writeObj();readObj();}privatestaticvoidreadObj(){try{ObjectInputStreamois=newObjectInputStream(newFileInputStream(obj.txt));Personp=(Person)ois.readObject();System.out.println(p);ois.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(ClassNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}privatestaticvoidwriteObj(){try{ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream(obj.txt));oos.writeObject(newPerson(zhangsan,20));oos.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}classPersonimplementsSerializable{Stringname;intage;publicPerson(Stringname,intage){this.name=name;this.age=age;}}OK,自己去验证一下五.管道流输入输出可以直接进行连接,通常结合线程使用packagecom.lgl.hellojava;importjava.io.IOException;importjava.io.PipedInputStream;importjava.io.PipedOutputStream;publicclassHelloJJAVA{publicstaticvoidmain(String[]args){PipedInputStreampi=newPipedInputStream();PipedOutputStreampo=newPipedOutputStream();try{pi.connect(po);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}Readread=newRead(pi);Writewrite=newWrite(po);newThread(read).start();newThread(write).start();}}classReadimplementsRunnable{privatePipedInputStreamin;publicRead(PipedInputStreamin){this.in=in;}@Overridepublicvoidrun(){try{byte[]buf=newbyte[1024];intlen=in.read(buf);Strings=newString(buf,0,len);System.out.println(s);in.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}classWriteimplementsRunnable{privatePipedOutputStreamout;publicWrite(PipedOutputStreamout){this.out=out;}@Overridepublicvoidrun(){try{out.write(yes.g
本文标题:JAVA之旅(三十)
链接地址:https://www.777doc.com/doc-2880670 .html