java IO其他流
1.内存操作流,ByteArrayInputStream和 ByteArrayOutputStream
案例:将小写转化为大写
/* * 内存操作流,将大写字母转化为小写字母(ByteArrayInputStream和 ByteArrayOutputStream) */ public static void ChangeLowLetterToBigLetter() throws IOException{ String str="he who has a dream is a true man"; //直接 将字符串转化为字节数组,放到内存中 ByteArrayInputStream in=new ByteArrayInputStream(str.getBytes()); //out是直接取得内存中的字节数组 ByteArrayOutputStream out=new ByteArrayOutputStream(); int count=0; int temp=0; //从内存中一个一个的读字节 while((temp=in.read())!=(-1)) { char ch=(char)temp; //转化为大写,直接写到内存中 out.write(Character.toUpperCase(ch)); } System.out.println(out.toString()); }
注意:这里一个ByteArrayInputStream对应一个ByteArryOutputStream ,通过每次读取一个字节的方式,能够很好的控制输入输出
内容操作流一般使用来生成一些临时信息采用的,这样可以避免删除的麻烦。
/** * @param args * 2.管道流 管道流主要可以进行两个线程之间的通信。 * PipedOutputStream 管道输出流 起点 * PipedInputStream 管道输入流 终点 */ public static void main(String[] args) { // TODO Auto-generated method stub Send send=new Send(); Recive revice=new Recive(); try{ //管道接受流实例和管道发送流实例连接 revice.getIn().connect(send.getOut()); } catch(Exception e) { e.printStackTrace(); } //开启两个线程 new Thread(send).start(); new Thread(revice).start(); } } //发送管道流 class Send implements Runnable { private PipedOutputStream out = null; public Send() { this.out = new PipedOutputStream(); } public PipedOutputStream getOut() { return this.out; } @Override public void run() { // TODO Auto-generated method stub String str=" he who has a dream is a true man"; try { out.write(str.getBytes()); } catch(Exception ex) { ex.printStackTrace(); } try{ out.close(); } catch(Exception ex) { ex.printStackTrace(); } } } /* * 接受管道 */ class Recive implements Runnable { private PipedInputStream in=null; public Recive() { in =new PipedInputStream(); } public PipedInputStream getIn() { return this.in; } @Override public void run() { // TODO Auto-generated method stub try { int len; byte[] all=new byte[1024]; len=in.read(all); System.out.println("success:"+new String(all,0,len)); } catch(Exception e) { e.printStackTrace(); } } }
二.打印流
/* *1 .打印流 * Printstream * 直接打印到对应的文件,格式化输出 */ public static void PrintStreamTest() throws IOException { String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"aaa.txt"; PrintStream printStram=new PrintStream(filePath); //下面的方法也能创建一个打印流实例 //PrintStream printS=new PrintStream(new FileOutputStream(filePath)); //直接打印到文件 printStram.println("nihaoma"); printStram.println("你妹没的"); //下面是格式化输出 String name="jackvin"; String age="12"; printStram.printf("name:%s \t age:%s",name,age); printStram.close(); }
结果:
nihaoma
你妹没的
name:jackvin age:12
二:system.out,system.in,system.err 重定向
/* * system.out 重定向,直接写文件 */ public static void SystemOutReDirector() throws IOException { String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"aaa.txt"; System.out.println("show in console"); File file=new File(filePath); PrintStream ps=new PrintStream(new FileOutputStream(file)); //将out定义成PrintStream,直接向文件中写入 System.setOut(ps); //写文件 System.out.println("this sentence will show in the txt"); } /* * system.err重定向,直接写文件 */ public static void SysErrReDirector() { String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"aaa.txt"; System.err.println("show in the console"); try { PrintStream ps =new PrintStream(filePath); System.setErr(ps); } catch(Exception ex) { ex.printStackTrace(); } System.err.println("show in the txt"); } /* * system.in重定向,直接从文件中读取 */ public static void SysInReadFromFile() { String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"bbb.txt"; try { //定义一个输入流对象 InputStream in=new FileInputStream(filePath); //修改system.in的读入方式 System.setIn(in); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } byte[] all=new byte[1024]; int count=0; int temp=0; try { while((temp=System.in.read())!=(-1)) { all[count++]=(byte)temp; } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } System.out.println(new String(all,0,count)); }
三:Scanner类,直接读取文件,输出到console
/* * Scanner类,直接读取文件输出到控制台 */ public static void scannerTest() { String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"bbb.txt"; try { Scanner scanner =new Scanner(new File(filePath)); while(scanner.hasNextLine()) { System.out.println(scanner.nextLine()); } System.out.println("sfsf"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } }
四:DataOutputStream 和DataInputStream
/* * DataOutputStream 输出流 */ public static void dataOutputStream() { String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"bbb.txt"; try { //定义一个DataOutputStream 对象 DataOutputStream out=new DataOutputStream(new FileOutputStream(filePath)); String str="hi,this is DataOutputStream write"; out.write(str.getBytes()); System.out.println("dataoutput sucess!"); } catch (Exception e) { // TODO: handle exception } } /* * DataInputStream 输入流,将DataOutStream 输入到文件的内容,写到控制台 */ public static void dataInputStreamTest() { String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"bbb.txt"; try { DataInputStream in=new DataInputStream(new FileInputStream(filePath)); byte[] all=new byte[1024]; int count=0; int temp=0; while((temp=in.read())!=(-1)) { all[count++]=(byte)temp; } System.out.println(new String(all,0,count)); } catch (Exception e) { // TODO: handle exception }
五:合并流 SequenceInputStream
/* *合并流 SequenceInputStream */ public static void sequenceInputStreamTest() { String filePathA="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"bbb.txt"; String filePathB="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"aaa.txt"; try { InputStream inA=new FileInputStream(filePathA); InputStream inB=new FileInputStream(filePathB); SequenceInputStream sequenceInputStream=new SequenceInputStream(inA,inB); byte [] all=new byte[1024]; int count=0; int temp=0; while((temp=sequenceInputStream.read())!=(-1)) { all[count++]=(byte)temp; } System.out.println(new String(all,0,count)); // sequenceInputStream.read(all); 如何不是一个一个字节的访问,输出的只是inB读入的文字 // System.out.println(new String(all)); inA.close(); inB.close(); } catch (Exception e) { // TODO: handle exception } }
六:压缩http://snowolf.iteye.com/blog/465433