java 输入输出流


         1.输入流 :程序从输入流的源中读取数据,输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数据,read方法给程序提供一个从输入流中读取数据的基本方法。   

   int read();

   read方法从输入流中顺序读取单个字节的数据。该方法返回字节值(0~255之间的一个整数),读取位置到达文件末尾,则返回-1

    int read(byte b[ ]);

程序把多个字节读到一个字节数组中:


 int read(byte b[ ], int off, int len);

  其中,off参数指定read方法把数据存放在字节数组b中的什么地方样,len参数指

定该方法将读取的最大字节数。上面所示的这两个read方法都返回实际读取的字节个

数,如果它们到达输入流的末尾,则返回-1


2.输出流:程序向输出流中写入数据




   java IO包中四个重要的abstract类

一:字节流

        1.InputStream

        2.OutputStream

二:字符流

       1.Reader

       2.Writer


      2FileOutputStream类(字节类)

package page3;

import java.io.IOException;  
import java.io.File;
import java.io.FileInputStream;  
import java.io.IOException;
; 
public class InputStream {  
    public static void main(String args[]){  
        try{      
               FileInputStream rf=new FileInputStream(new File("文件路径"));  
               int n=4;  
               byte buffer[]=new  byte[n];   
               int len=0;
               while(((len=rf.read(buffer,0,n))!=-1)&&(n>0)){ 
            	   System.out.println(len);
                   System.out.println(new String(buffer,0,len) );//下一次会覆盖掉这一次数组对应位置元素   
                }  
            
                System.out.println();  
                rf.close();  
        } catch(IOException  IOe){        
              System.out.println(IOe.toString());  
        }  
  
    }  
  
}  


1FileReader类(字符类)


                      

package page3;

import java.io.FileReader;
import java.io.IOException;  
import java.io.File;
import java.io.FileInputStream;  
import java.io.IOException;
; 
public class InputStream {  
    public static void main(String args[]){  
        try{      
               FileReader rf=new FileReader(new File("文件路径"));  
               int n=55;  
               char[] buffer=new char[n];   
               int len=0;
               while(((len=rf.read(buffer,0,buffer.length))!=-1)&&(n>0)){ 
                   System.out.println(new String(buffer,0,len) ); 下一次会覆盖掉这一次数组对应位置元素 
                }  
            
                System.out.println();  
                rf.close();  
        } catch(IOException  IOe){        
              System.out.println(IOe.toString());  
        }  
  
    }  
  
}  

      9.6 数组流 

字节输入流:ByteArrayInputStream

字节输出流:ByteArrayOutputStream分别使用字节数组作为流的源和目标。    

  ByteArrayInputStream(byte[]buf)

  ByteArrayInputStream(byte[] buf,intoffset,int length)


  第一个构造方法构造的数组字节流的源是参数buf指定的数组的全部字节单元,第二个构造方法构造的数组字节流


的源是参数buf指定的数组从offset处取的length个字节单元。


      

数组字节输出流调用

  public byte[] toByteArray()

  方法,可以返回输出流写入到缓冲区的全部字节。

  数组字节流读写操作不会发生IOException异常。

package page3;

import java.io.ByteArrayOutputStream;
import java.io.FileReader;
import java.io.IOException;  
import java.io.File;
import java.io.FileInputStream;  
import java.io.IOException;
; 
public class InputStream {  
    public static void main(String args[]){  
        try{      
               FileInputStream rf=new  FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\1.txt"));  
               int n=4;
               byte cbuf[]=new  byte[n];
                int len=0;
                ByteArrayOutputStream buf=new ByteArrayOutputStream();
                while((len=rf.read(cbuf,0,n))>0){
                	 System.out.println(len);
                	 buf.write(cbuf,0,len);
                	 System.out.println(buf.toString()); //输出的字节数组是每次都叠加的总和
                } 
                rf.close();  
        } catch(IOException  IOe){        
              System.out.println(IOe.toString());  
        }  
  
    }  
  
}  


与数组字节流对应的是数组字符流:CharArrayReaderCharArrayWriter


        1. CharArrayWriter:此类实现Writer的字符缓冲区。缓冲区会随向流中写入数据(其实是从它里面写数据)

package page3;

import java.io.ByteArrayOutputStream;
import java.io.CharArrayReader;
import java.io.CharArrayWriter;
import java.io.FileReader;
import java.io.IOException;  
import java.io.File;
import java.io.FileInputStream;  
import java.io.IOException;
; 
public class InputStream {  
    public static void main(String args[]){  
        try{      
               FileReader rf=new  FileReader(new File("C:\\Users\\Administrator\\Desktop\\1.txt"));  
               int n=4;
               char cbuf[]=new char[n];
                int len=0;
                CharArrayWriter buf=new CharArrayWriter();//此类实现一个可用作 Writer的字符//缓冲区。缓冲区会随向流中写入数据而自动增长
                while((len=rf.read(cbuf,0,n))>0){
                	 System.out.println(len);
                	 buf.write(cbuf,0,len);
                	 System.out.println(buf.toString()); 
                } 
               
                rf.close();  
        } catch(IOException  IOe){        
              System.out.println(IOe.toString());  
        }  
  
    }  
  
}  
2. CharArrayReader://实现一个可用作字符输入流的字符缓冲区。(其实是从它里面读数据)
package page3;

import java.io.ByteArrayOutputStream;
import java.io.CharArrayReader;
import java.io.CharArrayWriter;
import java.io.FileReader;
import java.io.IOException;  
import java.io.File;
import java.io.FileInputStream;  
import java.io.IOException;
; 
public class InputStream {  
    public static void main(String args[]){  
        try{    
      
               FileReader rf=new  FileReader(new File("C:\\Users\\Administrator\\Desktop\\1.txt"));  
               int n=4;
               int len=0;
               char cbuf[]=new char[5];
               char cbuf1[]=new char[n];
               rf.read(cbuf,0,5);
               //读相对于操作者而言是输入
               //写对于操作者来说是输出
               CharArrayReader buf=new CharArrayReader(cbuf);//实现一个可用作字符输入流的字符缓冲区。
                     while((len=buf.read(cbuf1,0,n))>0){
                	 System.out.println(len);
                	 System.out.println(new String(cbuf1,0,len) );
                     }
                rf.close();  
        } catch(IOException  IOe){        
              System.out.println(IOe.toString());  
        }  
  
    }  
  
}  

2DataInputStream类和DataOutputStream的构造方法


 (1DataInputStreamInputStreamin)  将创建的数据输入流指向一个由参数in指定的输入流,以便从后者读取


数据(按着机器无关的风格读取)。


 (2DataOutputStreamOutnputStreamout)  将创建的数据输出流指向一个由参数out指定的输出流,然后通过

这个数据输出流把Java数据类型的数据写到输出流out

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;


public class DataInputtest {

	public static void main(String[] args) throws IOException {
	FileOutputStream fos = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\1.txt");
	BufferedOutputStream bos = new BufferedOutputStream(fos);
	DataOutputStream dos = new DataOutputStream(bos);
	dos.writeUTF("ab");
    dos.writeBytes("cd");
    dos.writeChars("ef");
	dos.write(8);
    dos.close(); //只要关闭最上层流对象,下层的流对象也会关闭
    
    FileInputStream fis = new FileInputStream("C:\\Users\\Administrator\\Desktop\\1.txt");
    BufferedInputStream bis = new BufferedInputStream(fis);
    DataInputStream dis = new DataInputStream(bis);
    dis.readUTF();
    dis.close();
	}

}

二:从输入流读取数据BufferedWriter

package page2;

import java.io.*;
public class InputTest{
public static void main(String[] args) throws IOException{
  BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
  BufferedWriter buf2 = new BufferedWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\1.txt"));
  String str = buf.readLine();
  System.out.println(str);
  while(!str.equals("exit")){
   buf2.write(str);
   buf2.newLine();
   str =buf.readLine();
  }
  buf.close();
  buf2.close();
}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值