zoukankan      html  css  js  c++  java
  • java io系列22之 FileReader和FileWriter

    FileReader 是用于读取字符流的类,它继承于InputStreamReader。要读取原始字节流,请考虑使用 FileInputStream。
    FileWriter 是用于写入字符流的类,它继承于OutputStreamWriter。要写入原始字节流,请考虑使用 FileOutputStream。

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_22.html

    更多内容请参考:java io系列01之 "目录"

    FileReader和FileWriter源码分析

    1. FileReader 源码(基于jdk1.7.40)

    复制代码
     1 package java.io;
     2 
     3 public class FileReader extends InputStreamReader {
     4 
     5     public FileReader(String fileName) throws FileNotFoundException {
     6         super(new FileInputStream(fil java io系列21之 InputStreamReader和OutputStreamWritereName));
     7     }
     8 
     9     public FileReader(File file) throws FileNotFoundException {
    10         super(new FileInputStream(file));
    11     }
    12 
    13     public FileReader(FileDescriptor fd) {
    14         super(new FileInputStream(fd));
    15     }
    16 }
    复制代码

    从中,我们可以看出FileReader是基于InputStreamReader实现的。 

    2. FileWriter 源码(基于jdk1.7.40)

    复制代码
     1 package java.io;
     2 
     3 public class FileWriter extends OutputStreamWriter {
     4 
     5     public FileWriter(String fileName) throws IOException {
     6         super(new FileOutputStream(fileName));
     7     }
     8 
     9     public FileWriter(String fileName, boolean append) throws IOException {
    10         super(new FileOutputStream(fileName, append));
    11     }
    12 
    13     public FileWriter(File file) throws IOException {
    14         super(new FileOutputStream(file));
    15     }
    16 
    17     public FileWriter(File file, boolean append) throws IOException {
    18         super(new FileOutputStream(file, append));
    19     }
    20 
    21     public FileWriter(FileDescriptor fd) {
    22         super(new FileOutputStream(fd));
    23     }
    24 }
    复制代码

    从中,我们可以看出FileWriter是基于OutputStreamWriter实现的。


    示例程序

    复制代码
     1 import java.io.File;
     2 import java.io.FileInputStream;
     3 import java.io.FileOutputStream;
     4 import java.io.FileWriter;;
     5 import java.io.FileReader;
     6 import java.io.IOException;
     7 
     8 /**
     9  * FileReader 和 FileWriter 测试程序
    10  *
    11  * @author skywang
    12  */
    13 public class FileReaderWriterTest {
    14 
    15     private static final String FileName = "file.txt";
    16     private static final String CharsetName = "utf-8";
    17 
    18     public static void main(String[] args) {
    19         testWrite();
    20         testRead();
    21     }
    22 
    23     /**
    24      * OutputStreamWriter 演示函数
    25      *
    26      */
    27     private static void testWrite() {
    28         try {
    29             // 创建文件“file.txt”对应File对象
    30             File file = new File(FileName);
    31             // 创建FileOutputStream对应FileWriter:将字节流转换为字符流,即写入out1的数据会自动由字节转换为字符。
    32             FileWriter out1 = new FileWriter(file);
    33             // 写入10个汉字
    34             out1.write("字节流转为字符流示例");
    35             // 向“文件中”写入"0123456789"+换行符
    36             out1.write("0123456789
    ");
    37 
    38             out1.close();
    39 
    40         } catch(IOException e) {
    41             e.printStackTrace();
    42         }
    43     }
    44 
    45     /**
    46      * InputStreamReader 演示程序
    47      */
    48     private static void testRead() {
    49         try {
    50             // 方法1:新建FileInputStream对象
    51             // 新建文件“file.txt”对应File对象
    52             File file = new File(FileName);
    53             FileReader in1 = new FileReader(file);
    54 
    55             // 测试read(),从中读取一个字符
    56             char c1 = (char)in1.read();
    57             System.out.println("c1="+c1);
    58 
    59             // 测试skip(long byteCount),跳过4个字符
    60             in1.skip(6);
    61 
    62             // 测试read(char[] cbuf, int off, int len)
    63             char[] buf = new char[10];
    64             in1.read(buf, 0, buf.length);
    65             System.out.println("buf="+(new String(buf)));
    66 
    67             in1.close();
    68         } catch(IOException e) {
    69             e.printStackTrace();
    70         }
    71     }
    72 }
    复制代码

    运行结果
    c1=字
    buf=流示例0123456

  • 相关阅读:
    路由的路径模式
    使用source命令解决mysql导入乱码问题
    【转载】如何学习C++
    【Computer Vision】图像单应性变换/投影/仿射/透视
    【Paper Reading】Bayesian Face Sketch Synthesis
    【数据挖掘】相似性和相异性度量
    【C++】函数和指针
    【Paper Reading】Object Recognition from Scale-Invariant Features
    【Paper Reading】Improved Textured Networks: Maximizing quality and diversity in Feed-Forward Stylization and Texture Synthesis
    【数据挖掘】特征选择和降维
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/3844056.html
Copyright © 2011-2022 走看看