java字符输入流与输出流

来源:互联网 发布:韩氏父子 圆号网络 编辑:程序博客网 时间:2024/05/23 01:05

一.  Reader(字符输入流)和Writer(字符输出流)

字符流以字符为字节读取文本信息,本质都是二进制

Reader 

int read()读取一个字符,返回int值,低16位有效

int read(char[]chs)返回实际读取到的字符量

* java根据读写数据单位不同,将流分为字节流和字符流字节流最小读写单位为一个字节字符流最小读写单位为一个字符

 * 字符流虽然是以字符为单位,但是底层实际上还是以字节的形式读写,所以字符流天生就具备将字节转换

 * 位字符或字符转换为字节的能力。所以所有的字符流都是高级流,方便我们读写字符数据,无需再关心字符与字节的互相转换了。

//字符流:

public class OSWDemo {

       public static void main(String[] args) throws IOException {

              FileOutputStreamfos =new FileOutputStream("osw.txt");

// OutputStreamWriter的常用构造方法:

//OutputStreamWriter(OutputStreamWriter out)

// OutputStreamWriter(OutputStreamWriterout,String)

//将给定的字节输出流转换为字符流的同时,指定通过当前字符输出流写出的字符数据以何种字符集转换为字节

              OutputStreamWriterosw =new OutputStreamWriter(fos);

              osw.write("你好");

              osw.write("我很好");

              System.out.println("写出完毕!");

              osw.close();

       }

}

//转换流:

OutputStreamWriter可以处理字节流,以供给BufferedWriter

 

* java.io.InputStreamReader 字符输入流

 * 除了ISROSW之外的字符流,大部分都只处理其他字符流,但是低级流都是字节流,

 * 这时若希望用一个字符流来处理字节流时就产生冲突

 * 所以可以通过创建ISROSW来处理字节流,而ISROSW本身是字符流,所以可以使得其他字符流得力处理该流

 * ISROSW相当于是联系字节流与字符流的纽带,类似于转换器的效果。

public class ISRDemo {

       public static void main(String[] args) throws IOException {

              FileInputStreamfis =new FileInputStream("osw.txt");

              InputStreamReaderisr =new InputStreamReader(fis);

              BufferedReaderbr =new BufferedReader(isr);

               * int read() 一次读取一个夫妇,返回-1读到末尾

              intd = -1;

              char[]c = newchar[10];

              while ((d =br.read(c)) != -1) {

                     System.out.print(String.valueOf(c, 0,d));

              }

              System.out.println("\n写出完毕");

             

              br.close();

       }

}

 * 缓冲字符流内部维护缓冲区(字符数组),读写字符效率高并且可以建行读写字符串 BufferedWriter ,BufferedReader

 *

 *java.io.PrintWriter 常用的缓冲字符输出流,内不自动处理BufferedWriter来完成缓冲操作,并且

 * PrintWriter自由自动行刷新功能,会自动创建BufferedWriter

public class PWDemo1 {

       public static void main(String[] args) throws IOException {

              /**

               * PrintWriter提供了丰富的构造方法其中提供了可以针对文件写出操作的构造方法 PrintWriter(Stringpath)

               * PrintWriter(File file)

               */

              PrintWriterpw = new PrintWriter("pw.txt","true");

              pw.print("锄禾日党务");

              pw.print("汗滴禾下土");

              pw.print("谁知盘中餐");

              pw.print("丽丽姐辛苦");

              System.out.println("写出完毕!");

              pw.close();

       }

}

 

* PW处理其他流

public class PWDemo2 {

       public static void main(String[] args) throws IOException {

               * 向文件pw1.txt中写出内容

              FileOutputStreamfos =new FileOutputStream("pw.txt");

               * PrintWriter构造方法传入字节流的话,不能指定字符集

               * 若希望指定字符集,需要在中间使用 OutputStreamWriter

              OutputStreamWriterosw =new OutputStreamWriter(fos,"utf-8");     

              PrintWriterpw = new PrintWriter(osw);

              pw.println("啦啦啦");

              pw.println("哈哈哈");

              System.out.println("写出完毕!");

              pw.close();

       }

}

* 自动行刷新PW处理的是一个流时,构造方法允许传入第二个参数,该参数是一个boolean

 * 当为true的时候,则具有自动刷新功能,即:每当使用println方法写出一行字符串时会自动flush

public class PWDemo3 {

       public static void main(String[] args) throws IOException {

               * 记事本功能

              PrintWriterpw = newPrintWriter(new OutputStreamWriter(new FileOutputStream("note.txt")),true);

 

              Scannersc =new Scanner(System.in);

              System.out.println("请开始输入内容");

              while (true) {

                     Stringline =sc.nextLine();

                     if ("exit".equals(line)) {

                            System.out.println("再见!");

                            break;

                     }

                      * 具有自动刷新的pw在使用println方法时会自动flush

                     pw.println(line);

              }

              pw.close();

       }

}

 

* java.io.BufferedReader 缓冲字符输入流,特点:按行读取字符串

public class BRDemo {

       public static void main(String[] args) throws IOException {

 

              BufferedReaderbr =new BufferedReader(new InputStreamReader(new FileInputStream(

                            "." + File.separator +"src" + File.separator +"day08" + File.separator +"BRDemo.java")));

               * String readLine() 连续读取若干字符,直到读取换行符为止,将换行符之前的所有字符以一个字符串返回若该方法返回null

               * 表示返回到末尾

              Stringline = null;

              while ((line =br.readLine()) != null) {

                     System.out.println(line);

              }

              br.close();

       }

}

 

0 0
原创粉丝点击