Java IO流——字符流读写操作

用字符流进行文件读写,这里列出了两种方法,两种方法都是对字符进行操作
不像字节流,需要使用缓冲;字符流读写适用于对文本文件进行操作

关于如何使用字节流操作,请看: Java IO操作——字节流进行读写操作

/**
 * 演示IO操作的字符流操作
 */
package com.test2;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @file_name:IO_Practice2.java
 *
 * @date:2017年7月15日
 *
 * @author:Kooking
 *
 *
 */
public class IO_Practice2 {

    public static void main(String[] args) {
        //用方法一
        /*IO_WriteNRead_1 io_WriteNRead_1 = new IO_WriteNRead_1(new File("e:\\test\\test\\USER3.txt"));
        //读文件
//      io_WriteNRead_1.readFile();
        //写文件
//      io_WriteNRead_1.writeFile("你好");
        //复制文件(另存为)
        io_WriteNRead_1.copyFile("e:\\test\\test\\USER4.txt");*/


        //用方法二
        ReadNWrite__2 readNWrite__2=new ReadNWrite__2(new File("e:\\test\\test\\USER3.txt"));
        //读操作
//      readNWrite__2.readFile();
        //写操作
        readNWrite__2.writeFile("你好\r\n");
        readNWrite__2.copyFile("e:\\test\\test\\USER5.txt");
    }

}

// 方法一
class IO_WriteNRead_1 {
    File file = null;
    FileWriter fw = null;
    FileReader fr = null;

    public IO_WriteNRead_1(File file) {
        this.file = file;
    }

    // 将文件读入到内存
    public void readFile() {
        char[] c = new char[1024];
        String s = null;
        int size = 0;
        try {
            fr = new FileReader(file);
            while ((size = fr.read(c)) != -1) {
                s = new String(c, 0, size);
                System.out.println(s);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    // 将数据写出到文件
    public void writeFile(String s) {
        try {
            //覆盖原有文件内容(若存在)
//          fw = new FileWriter(file);
            //追加内容到原有文件(若存在),否则创建新文件
            fw=new FileWriter(file, true);
            fw.write(s);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // 复制文件
    public void copyFile(String s) {
        char[] c = new char[1024];
        int size = 0;
        try {
            fr = new FileReader(file);
            fw = new FileWriter(s);
            while ((size = fr.read(c)) != -1) {
                fw.write(c, 0, size);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fr.close();
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}


//方法二:利用字符缓冲流
class ReadNWrite__2{
    File file = null;
    FileWriter fw = null;
    FileReader fr = null;
    BufferedWriter bw=null;
    BufferedReader br=null;

    public ReadNWrite__2(File file) {
        this.file = file;
    }

    // 将文件读入到内存
    public void readFile() {
        String s = "";
        try {
            fr = new FileReader(file);
            br=new BufferedReader(fr);
            while ((s=br.readLine()) != null) {
                System.out.println(s+"\n");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //应遵循先开后关原则
                br.close();
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    // 将数据写出到文件
    public void writeFile(String s) {
        try {
            //替代原有文件(若存在)
//          fw = new FileWriter(file);
            //追加内容到原有文件(若存在),否则创建新文件
            fw=new FileWriter(file, true);
            bw=new BufferedWriter(fw);

            bw.write(s);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //注意:先开后关,顺序不能颠倒,否则会抛出异常
                bw.flush();
                bw.close();
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // 复制文件
    public void copyFile(String s) {
        String sbuf="";
        try {
            fr = new FileReader(file);
            fw = new FileWriter(s);
            br=new BufferedReader(fr);
            bw=new BufferedWriter(fw);
            while ((sbuf=br.readLine())!=null) {
                bw.write(sbuf+"\r\n");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {//先开后关
                br.close();
                fr.close();
                bw.flush();
                bw.close();
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值