zoukankan      html  css  js  c++  java
  • Java I/O流

    确定流的一般过程:

    (1)是读还是写。读: Reader InputStream   写:Writer OutputStream

    (2)是否纯文本。 是:  Reader   Writer     否:InputStream   OutputStream

    (3)确定流源:

               硬盘:File   内存:ByteArray  CharArray  网络:s.getInputStream( )  s.getOutputStream( ) 

    (4)是否要转换流: InputStreamReader OutputStreamWriter

    (5)是否要缓冲:BufferedInputStream, BufferedOutputStream,( 字节流 ) BufferedReader, BufferedWriter( 字符流 )

    InputStream是接口,抽象方法有:

    • int read( )   功能:读取一个字节放到int的低8位,其余高位填0,返回这个int类型数值。读到输入流末尾返回-1
    • int read(byte [ ] b)  功能:读取流填满数组,返回数组b长度;读取流填不满数组,返回读取流本次读取的字节数。读到输入流末尾返回-1
    • int read(byte [ ]b,int off,int len)  功能:每次读取的字节存放到off到off+len-1之间的单元,数组读满返回len,读不满返回实际读取的长度。读到输入流末尾返回-1

    注意:InputStream读取一个文本(包含汉字和英文),假设系统默认编码是gbk,会把每一个字符的编码拆成两个字节,每个字节放到int的低8位,高位补0,即,一个字符,返回两个整型,两个整型的最低字节拼接在一起,是文本一个字符的gbk或UTF等的二进制编码。

     1 import java.io.*;
     2 public class TestIO {
     3     public static void main(String[] args) throws Exception {
     4         FileInputStream fis = new FileInputStream("C:/Users/well/Desktop/IO测试.txt");
     5         int b = 0;/*文本流内容是: 不识庐山真面目只缘身在此山中native  */
     6         int count = 0;
     7         while((b = fis.read()) != -1) {
     8             count++;
     9             System.out.print(b + " ");
    10         }
    11         System.out.println();
    12         System.out.println(count);//统计会输出多少个整型数值
    13     }
    14 }
    View Code

    OutputStream是接口,抽象方法有:

      1 、int write(int b)

      功能:将b的最低的一个字节写入此输入流,其他三个字节丢弃。

      2、int write(byte[] b)

      功能:将指定的字节数组b写入此输入流。

      3、int write(byte[] b, int off, int len)

      功能:将指定byte数组中从偏移量off开始的len个字节写入输入流。

      4、flush()

      功能:刷新此输入流并强制写出所有缓冲的输出字节数。

      5、close()

      功能:关闭输出流,释放这个流的相关资源。

    Reader  基本方法:

    int read( );             读一个字符,当流中没有数据可读时,返回值为-1

    int read(char[] c);  读取流的字符置于数组中,返回读取字符个数。

     

    Writer基本方法

    write(int b);  写一个字符数据

     out.write(char[] cbuf)   向流中写字符数组

    cbufout.write(String s)  向流中写一个字符串(很实用)

     flush()   将缓冲区中数据立即写入到输出流, 刷新缓冲区

     out.close()  关闭流

    字符流一次处理一个字符,底层仍然是基本的字节序列;字符流操作的是文本文件

    写入文件后必须要用flush()刷新

    对已有文件续写,new流时增加参数“true”

     1 import java.io.*;
     2 public class TestIO {
     3     public static void main(String[] args) throws Exception {
     4         FileWriter fr = new FileWriter("C:/Users/well/Desktop/IO测试.txt");
     5         String str = new String("123456");
     6         char[] ch = new char[10];
     7         ch = str.toCharArray();
     8         fr.write("hello");//写入字符串
     9         fr.write(ch);//写入字符数组
    10         fr.write(126);//写入单个字符,整数大小必须符合ASCII码
    11         fr.flush();
    12         fr.close();
    13     }
    14 }
    View Code

     

    1. 字符流的缓冲区:BufferedReader和BufferedWreiter

    * 缓冲区的出现时为了提高流的操作效率而出现的.

    * 需要被提高效率的流作为参数传递给缓冲区的构造函数

    * 在缓冲区中封装了一个数组,存入数据后一次取出

    BufferedReader示例:

    读取流缓冲区提供了一个一次读一行的方法readline,方便对文本数据的获取。
    readline()只返回回车符前面的字符,不返回回车符。如果是复制的话,必须加入newLine(),写入回车符

    newLine()是java提供的多平台换行符写入方法。

     1 class BufferedReaderDemo {  
     2     public static void main(String[] args)  throws IOException {  
     3   
     4         //创建一个字符读取流流对象,和文件关联  
     5         FileReader rw = new FileReader("buf.txt");  
     6   
     7         //只要将需要被提高效率的流作为参数传递给缓冲区的构造函数即可  
     8         BufferedReader brw = new BufferedReader(rw);  
     9   
    10           
    11         for(;;) {  
    12             String s = brw.readLine();  
    13             if(s==null) break;  
    14             System.out.println(s);  
    15         }  
    16           
    17         brw.close();//关闭输入流对象  
    18   
    19     }  
    20 }  
    View Code
     1 class BufferedWriterDemo {  
     2     public static void main(String[] args)  throws IOException {  
     3   
     4         //创建一个字符写入流对象  
     5         FileWriter fw = new FileWriter("buf.txt");  
     6   
     7         //为了提高字符写入效率,加入了缓冲技术。  
     8         //只要将需要被提高效率的流作为参数传递给缓冲区的构造函数即可  
     9         BufferedWriter bfw = new BufferedWriter(fw);  
    10   
    11         //bfw.write("abc
    de");  
    12         //bfw.newLine();               这行代码等价于bfw.write("
    "),相当于一个跨平台的换行符  
    13         //用到缓冲区就必须要刷新  
    14         for(int x = 1; x < 5; x++) {  
    15             bfw.write("abc");  
    16             bfw.newLine();                  //java提供了一个跨平台的换行符newLine();  
    17             bfw.flush();  
    18         }  
    19   
    20   
    21   
    22         bfw.flush();                                                //刷新缓冲区  
    23         bfw.close();                                                //关闭缓冲区,但是必须要先刷新  
    24   
    25         //注意,关闭缓冲区就是在关闭缓冲中的流对象  
    26         fw.close();                                                 //关闭输入流对象  
    27   
    28     }  
    29 }  
    View Code
  • 相关阅读:
    DPK880 打印机 驱动正确安装不反应。
    VB6.0 获取N位有效数字方法
    Asp.Net开发小技巧汇总
    Microsoft SqlServer生成表数据Insert语句
    dell 服务器重装
    编程应该注意
    FIRST
    SharedObject使用:在FluorineFx.net与Flex中使用共享对象维护在线用户列表实例
    Flex与As3学习笔记之:Part 3 函数参数、字符串处理、日期与时间类型
    Flex与As3学习笔记之:Part 1 Flex语言基础
  • 原文地址:https://www.cnblogs.com/joyeehe/p/7870104.html
Copyright © 2011-2022 走看看