流的概念:
流的概念源于UNIX中管道的概念,一个流必须有源端和目的端,根据流的方向分为输入流和输出流
输入流:用户从输入流中读取信息到内存中,因此不能写
输出流:用户从内存中往输出流中写入数据,因此不能读。
流的分类:
节点流
FileReader
FileWriter
FileInputStream
FileOutputStream
处理流
a)缓冲流:BufferdInputStream/BufferedOutputStream /BufferedReader/BufferedWriter
该类型是对一个已经存在的流的连接和封装,通过所封装的流的功能调用实现数据的读写,处理流的构造方法总是要带一个其他流对象作为参数,一个流对象经过其他流多次的包装
叫做流的连接
缓冲流代码:
public void read(){ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String s; try { while((s=in.readLine()).length()!=0){ System.out.println(s); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void write(){ try { PrintWriter out =new PrintWriter(new BufferedWriter(new FileWriter("D:\\java\\test.txt"))); out.println("Hello world"); out.println("hello world 2"); out.println("Hello world 3"); out.close(); } catch (IOException e) { e.printStackTrace(); } }
b)转换流:InputStreamReader/OutputStream
FileReader fr=new FileReader(“a.txt”); 与 InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt")); 的意义相同。如果要使用指定表编码表时,必须使用转换流,即如果a.txt中的文件中的字符数据是通过utf-8的形式编码,那么在读取时,就必须指定编码表,那么转换流是必须的。
构造函数主要有:
InputStreamReader(InputStream); //通过构造函数初始化,使用的是本系统默认的编码表GBK。 InputStreamWriter(InputStream,String charSet); //通过该构造函数初始化,可以指定编码表。 OutputStreamWriter(OutputStream); //通过该构造函数初始化,使用的是本系统默认的编码表GBK。 OutputStreamwriter(OutputStream,String charSet); //通过该构造函数初始化,可以指定编码表。
public static void stream(){ OutputStream out=null; try { out=new FileOutputStream("D:\\java\\test2.txt"); OutputStreamWriter w=new OutputStreamWriter(out,"Utf-8"); w.append("hello.\r\n"); w.append("World."); w.flush(); w.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void input(){ InputStream in=null; try { in=new FileInputStream("D:\\java\\test2.txt"); InputStreamReader ir=new InputStreamReader(in,"UTF-8"); StringBuffer sb=new StringBuffer();//在这里创建了一个缓存 while(ir.ready()){ sb.append((char)ir.read()); } System.out.println(sb.toString()); ir.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } }
c)数据流:
构造函数主要有:
DataInputStreamReader(InputStream); DataInputStreamWriter(OutputStream);
<----------------------------------主要方法------------------------------>int readInt();//一次读取四个字节,并将其转成int值 writeInt(int);//一次写入四个字节,注意和write(int)不同,write(int)只将该整数的最低一个8位写入,剩余三个8为丢失 hort readShort(); writeShort(short); String readUTF();//按照utf-8修改版读取字符,注意,它只能读writeUTF()写入的字符数据。 writeUTF(String);//按照utf-8修改版将字符数据进行存储,只能通过readUTF读取。
参考自:http://blog.csdn.net/zzp_403184692/article/details/8057693