java 字符输入流,字符输出流,字符缓冲流

来源:互联网 发布:马里亚纳网络性奴 编辑:程序博客网 时间:2024/05/21 21:15
1 字符输入流
字符流(Java IO的Reader和Writer)功能与InputStream和OutputStream非常类似,InputStream和OutputStream基于字节处理,而字符流(Reader和Writer)是基于字符处理。主要用于读写文本。

1.1 Reader 类的常用方法

Reader类是Java IO中所有Reader的基类。子类包括FileReader,BufferedReader,InputStreamReader,StringReader和其他Reader。

1. read() ; 读取字符输入流。读取字符输入流的下一个字符,返回一个字符,意味着这个返回值的范围在0到65535之间(当达到流末尾时,同样返回-1)。这并不意味着Reader只会从数据源中一次读取2个字节,Reader会根据文本的编码,一次读取一个或者多个字节。
2. read(char cbuf[]);读取字符输入流。读取多个字符,存入字符数组cbuf,返回实际读入的字符数。
3. read(char cbuf[], int off, int len); 方法,读取字符输入流。每次读取len个字符,存入字符数组cbuf,从off下标开始存储。
4. close(); 关闭当前流,释放与该流相关的资源,防止资源泄露。在带资源的try语句中将被自动调用。关闭流之后还试图读取字符,会出现IOException异常。

1.2 Reader类的子类:FileReader

FileReader类从InputStreamReader类继承而来(间接继承了Reader)。该类按字符读取流中数据。

1.3 FileReader构造方法和常用方法

1.3.1 构造方法

1. FileReader(File file);通过打开一个到实际文件的连接来创建一个FileReader,该文件通过文件系统中的 File 对象 file 指定。
2. FileReader(String fileName) ; 通过打开一个到实际文件的连接来创建一个FileReader,该文件通过文件系统中的路径名 name 指定。
3. FileReader(FileDescriptor fd) ; 在给定从中读取数据的FileDescriptor 的情况下创建一个新 FileReader。
   提示:FileDescriptor 是“文件描述符”。
   其中有三个属性:
   
   1. in 标准输入(键盘)的描述符(从键盘输入读取流)
   2. out 标准输出(屏幕)的描述符(讲流输出到控制台上)
   3. err 标准错误输出(屏幕)的描述符(将流以红色的字体输出到控制台上)
   代码示例:
   
    try {       FileWriter fw = new FileWriter(FileDescriptor.out);       fw.write("11111。");       fw.flush();       fw.close();       }...

1.3.2 常用方法

1. read();读取字符输入流。读取字符输入流的下一个字符,返回一个字符。
    
  try {       File file = new File("test.txt");       FileReader fileReader = new FileReader(file);       int read = fileReader.read();//默认第一次读取第一个字符       System.out.println((char)read);       }...
2. read(char cbuf[]);读取字符输入流。读取多个字符,存入字符数组cbuf,返回实际读入的字符数。
     
  try {       File file = new File("test.txt");       FileReader fileReader = new FileReader(file);              char c [] = new char[20];       int len = fileReader.read(c);//       System.out.println("读取的字符长度为:"+len);              for (char d : c) {       System.out.print(d);       }       }...

3. read(char cbuf[], int off, int len);读取字符输入流。每次读取len个字符,存入字符数组cbuf,从off下标开始存储。
     
  try {       File file = new File("test.txt");       FileReader fileReader = new FileReader(file);              char c [] = new char[20];       int len = fileReader.read(c,2,8);//读取8个字符存入c数组,从下标2开始存储       System.out.println("读取的字符长度为:"+len);              for (char d : c) {       System.out.print(d);       }              }

4. close();关闭当前流,释放与该流相关的资源,防止资源泄露。在带资源的try语句中将被自动调用。关闭流之后还试图读取字符,会出现IOException异常。
     
  try {       File file = new File("test.txt");       FileReader fileReader = new FileReader(file);       int read = fileReader.read();//       System.out.println((char)read);       fileReader.close();//通过close()来关闭流,以释放系统资源。       }...       //或者在这里关闭         ...finally {           if(fileReader!=null)       fileReader.close();         }
   注意:
   1. 通常不使用close会导致内存泄露,垃圾回收机制会回收,但是最好自己显式关闭
   2. OutputStream的作用是如FileOutStream,当不调用close的时候,不会将缓存刷入文件中。
   所以:一般使用完IO流之后都要通过close()来关闭,以释放系统资源


2 字符输出流

2.1 Writer类的常用方法

1. write (String str); 将指定的字符串写入此输出流。
2. write(char[] cbuf, int off, int len); 将指定 char 数组中从偏移量 off 开始的 len 个字符写入此输出流。
3. flush();  用于清空缓存里的数据,并通知底层去进行实际的写操作。(强制把缓存区里面的数据写入到文件)
4. close();关闭当前流,释放与该流相关的资源。

2.2 Writer类的子类:FileWriter

FileWriter类从OutputStreamWriter类继承而来(间接继承Writer类)。该类按字符向流中写入数据。

2.3 FileWriter 构造方法和常用方法

2.3.1 构造方法
1. FileWriter(File file);通过打开一个到实际文件的连接来创建一个FileWriter,该文件通过文件系统中的 File 对象 file 指定。 
2. FileWriter(File file, boolean append);通过打开一个到实际文件的连接来创建一个FileWriter,该文件通过文件系统中的 File 对象 file 指定。 如果第二个参数为true,则将字符写入文件末尾处,而不是写入文件开始处。
3. FileWriter(String fileName);通过打开一个到实际文件的连接来创建一个FileWriter,该文件通过文件系统中的路径名 name 指定。
4. FileWriter(String fileName, boolean append);通过打开一个到实际文件的连接来创建一个FileWriter,该文件通过文件系统中的路径名 name 指定。如果第二个参数为true,则将字符写入文件末尾处,而不是写入文件开始处。
5. FileWriter(FileDescriptor fd);在给定从中写入数据的FileDescriptor 的情况下创建一个新 FileReader。(可以向控制台输出文本流)。

2.3.2 常用方法

1. write (String str); 将指定的字符串写入此输出流。
     
  try {       File file = new File("test.txt");       Writer fileWriter = new FileWriter(file);       fileWriter.write("十年之前,我不认识你。");       fileWriter.flush();       fileWriter.close();       }...  
2. write(int c );将指定的字符写入此输出流。
     
  try {       File file = new File("test.txt");       Writer fileWriter = new FileWriter(file);       fileWriter.write('育');       fileWriter.flush();       fileWriter.close();       }...
3. write(char[] cbuf);将 cbuf 字符数组写入此输出流。
      
 try {       File file = new File("test.txt");       Writer fileWriter = new FileWriter(file);       char[] charArray = "字符串转字符数组".toCharArray();       fileWriter.write(charArray);       fileWriter.flush();       fileWriter.close();       }

4. write(char[] cbuf, int off, int len);将 cbuf 字符数组,按偏移量 off 开始的 len 个字符写入此输出流。
    
   try {       File file = new File("test.txt");       Writer fileWriter = new FileWriter(file);       char[] charArray = "字符串转字符数组".toCharArray();       fileWriter.write(charArray, 1, 5);//从偏移量 1 开始,写入5个字符。       fileWriter.flush();       fileWriter.close();       }

5. write(String str, int off, int len);
   
    try {       File file = new File("test.txt");       Writer fileWriter = new FileWriter(file);       String str ="字符串也可以制定写的内容";       fileWriter.write(str, 3, 5);       fileWriter.flush();       fileWriter.close();       } 


3 字符缓存流(BufferedReader/BufferedWriter)

(BufferedReader/BufferedWriter) 是带缓冲区的字符流,默认缓冲区大小是8Kb,能够减少访问磁盘的次数,提高文件读取性能;并且可以一次性读取一行字符。(类似管道套管道一样,不带缓冲的流只能一滴一滴流,套了管道后,可以让一滴一滴留到外面的管道后一次性流出。)


3.1 字符缓存流构造方法

3.1.1 BufferedReader

1. BufferedReader(Reader in);创建一个默认缓冲区大小 8Kb 的字符缓冲输入流;
2. BufferedReader(Reader in, int sz);创建一个字符缓冲输入流;并分配 sz/byte 大小的缓冲区。

3.1.1 BufferedWriter

1. BufferedWriter(Writer out); 创建一个默认缓冲区大小 8Kb 的字符缓冲输出流;
2. BufferedWriter(Writer out, int sz); 创建一个字符缓冲输出流;并分配 sz/byte 大小的缓冲区。

3.2 字符缓存流的常用方法:readLine(), newLine()

1. BufferedReader.readLine();在字符缓冲输入流读取字符的时候,可以一次性读取一行,并将游标指向下一行。
      
 try {       File file = new File("test.txt");       FileReader fr = new FileReader(file);       BufferedReader br = new BufferedReader(fr);       String str;       while ((str = br.readLine())!=null) {       System.out.println(str);       }       }

2. BufferedWriter.newLine();在字符串缓冲输出流写入字符的时候,默认是在一行写入,当需要换行的时候,调用 newLine() 实现文本换行。
     
  try {       File file = new File("test.txt");       FileWriter fw = new FileWriter(file);       BufferedWriter bw = new BufferedWriter(fw);       bw.write("写入一行的文本");       bw.newLine();//换行       bw.write("写入第二行的文本");       bw.flush();//刷新缓冲区,强制写入文件中       bw.close();       }...

原创粉丝点击