您的位置 首页 java

Java基础——IO流(6)

1 基本概括

2 主要介绍

2.1 FileReader和FileWriter基本介绍

FileReader

“文件字符输入流”,一般用于读取文本形式的文件,也可以用来读取字节形式文件,但是乱码问题依然不能完全避免。

FileWriter

”文件字符输出流”,一般用于写出本形式的文件,也可以用来写出字节形式文件,但是乱码问题依然不能完全避免。

2.2 FileReader和FileWriter原理

FileReader能够完成字符的读取操作主要是依赖InputStreamReader完成的,而InputStreamReader能够完成字符的读取主要的依赖StreamDecoder完成的。

字符读取流关系结构图:

FileWriter能够完成字符的读取操作主要是依赖OutputStreamReader完成的,而OutputStreamReader能够完成字符的读取主要的依赖StreamEncoder完成的。

字符写出流关系结构图:

3 用例

3.1 进行文件的拷贝

 @ Test 
public void IOTest01() throws Exception{
    FileReader fr = new FileReader("D:\test01.txt");
    FileWriter fw = new FileWriter("D:\test01.txt");
    char[] cbuf = new char[1024];
    int len;
    while((len = fr.read(cbuf)) != -1){
    	fw.write(cbuf, 0, len);
    }
    fw.close();
    fr.close();
}  

3.2 将内容追加到文件

 @Test
public void IOTest02() throws Exception{
    FileWriter fw = new FileWriter("D:\test.txt",true);
    fw.write("Hello world!");
    fw.close();
}  

3.3 读取文件内容

  @Test
public void IOTest03() throws Exception{
    FileReader fr = new FileReader("D:\test.txt");
    char[] cbuf = new char[1024];
    int len;
    while((len = fr.read(cbuf)) != -1){
   	 System.out.println(new String(cbuf,0,len));
    }
    fr.close();
}  

4 源码分析

4.1 FileWriter

 package com.chy.io.original.code;
 
import java.io.File;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.OutputStreamWriter;
 
 
/**
  * 文件字符输出流、与国际接轨、创建了此流。
  * 仅仅是提供四个构造方法、还是调用OutputStreamWriter的默认编码的构造方法。
  * 所以FileWriter使用的方法本质都是通过OutputStreamWriter将FileOutputStream传递给StreamEncoder来内部操作字节。给我们展现的则是操作字符。
  */
 
public class FileWriter extends OutputStreamWriter {
 
     /**
      * 调用 OutputStream Writer默认编码的构造方法构造FileWriter流。此流是在指定目的地中替换原有内容
      * 从方法也可以看出、是对FileOutputStream的包装。
      */
     public FileWriter(String fileName) throws IOException {
         super ( new java.io.FileOutputStream(fileName));
     }
 
     /**
      * 调用OutputStreamWriter默认编码创建FileWriter。此流通过传入的append值决定是否目的地中原有内容替换
      */
     public FileWriter(String fileName, boolean append) throws IOException {
         super ( new java.io.FileOutputStream(fileName, append));
     }
 
     /**
      * 调用OutputStreamWriter默认编码的构造方法构造FileWriter流。此流是在指定目的地中替换原有内容
      */
     public FileWriter(File file) throws IOException {
     super ( new java.io.FileOutputStream(file));
     }
 
     /**
      * 调用OutputStreamWriter默认编码的构造方法构造FileWriter流。此流通过传入的append值决定是否目的地中原有内容替换
      */
     public FileWriter(File file, boolean append) throws IOException {
         super ( new java.io.FileOutputStream(file, append));
     }
 
     /**
      * 调用OutputStreamWriter默认编码创建FileWriter。此流通过传入的append值决定是否目的地中原有内容替换
      */
     public FileWriter(FileDescriptor fd) {
         super ( new java.io.FileOutputStream(fd));
     }
 
}  

4.2 FileReader

  package com.chy.io.original.code;
 
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileNotFoundException;
 
 
/**
  *创建一个文件字符流。本质是用OutputStreamWriter、StreamEncoder对 File InputStream进行装饰。
  *

  *
  */
public class FileReader extends InputStreamReader {
 
    /**
     * 与FileWriter对称、调用父类InputStreamReader默认编码的构造器、及FileInputStream来构造FileReader。
     */
     public FileReader(String fileName) throws FileNotFoundException {
         super ( new  FileInputStream (fileName));
     }
 
    /**
     * 根据File创建一个FileReader
     */
     public FileReader(File file) throws FileNotFoundException {
         super ( new FileInputStream(file));
     }
 
    /**
     * 根据FileDescriptor创建。
     */
     public FileReader(FileDescriptor fd) {
     super ( new FileInputStream(fd));
     }
}  

文章来源:智云一二三科技

文章标题:Java基础——IO流(6)

文章地址:https://www.zhihuclub.com/188361.shtml

关于作者: 智云科技

热门文章

网站地图