字符的输入输出流

1.Writer抽象类

Writer抽象类里的方法

由于Writer是抽象类不能创建对象,所以用它子类来完成写入字符的操作

1.1FileWriter类

FileWriter类是Writer的子类,是文件写入流,以字符流的形式对文件进行写操作,其构造方法有5种重载,以下是常用的4种:

案例:

package Writer;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class FileWriterTest {
    //定义常量
    private static String LIN_SEPARATOR=System.getProperty("line.separator");//换行
    public static void main(String[] args) {
        FileWriter fw=null;
        try {
            //append参数 表示是否追加 ,true添加,false覆盖
            fw= new FileWriter("writerData.txt",true);
//            File file=new File("writerData.txt");
//            fw=new FileWriter(file,true);
//            添加换行符
            fw.write(97);
            fw.write(LIN_SEPARATOR);
            fw.write("393933333"+LIN_SEPARATOR);
            fw.write("aaaaa",1,3);
            //写入换行符
            fw.write(LIN_SEPARATOR);
            fw.write(new char[]{'a','b','c'});
            //刷新缓冲区,数据立刻写入文件
            fw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fw!=null){
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

换行符

  • 不同操作系统换行符:

    • windows下的文本文件换行符:\r\n

    • linux/unix下的文本文件换行符:\n

    • Mac下的文本文件换行符:\r

  • 要用System.getProperty(“line.separator”)代替 固定格式的换行符

  • 具备平台无关性

  • 一次编写,到处运行

  • 更保险

3.Reader抽象类

Reader抽象类里的方法

 由于Reader是抽象类不能创建对象,所以用它子类来完成写入字节的操作

4.FileReader类

FileReader类是Reader的子类,称为文件读取流,允许以字符流的形式对文件进行读操作,其构造方法有3种重载方式,以下是常用的2种:

案例:

package Reader;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileReaderTest {
    //创建FileReader对象
    public static void main(String[] args) {
//        readData2();一个一个读这样效率低
        readData();//一个一个数组读
    }
    public static void readData2(){
        FileReader fr = null;
        try {
            fr=new FileReader("writerData.txt");
            int ch;
           while ((ch=fr.read())!=-1){
               System.out.println((char) ch);
           }
            System.out.println("读取完毕");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (fr != null) {
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    private static void readData() {
        FileReader fr = null;
        try {
            //创建FileReader对象
            fr = new FileReader("writerData.txt");
            //八流中数据循环的读到数组缓存中
            //定义数据
            char[] buffer = new char[1024];
            //每次读到数据数量
            int num;
            //把流中数据循环的读到数组缓存中
            //读到的数据为-1表示数据已经读完
            while ((num = fr.read(buffer)) != -1) {
                //如果把读取的数据长度设定好,读到最后数据长度有空闲 计算机会补上
                //如本次数据有36个,设定35长度每次读35个,剩一个new String会补上
                //错误写法
//                String str =new String(buffer);
//                String str=new String(buffer,0,buffer.length);
                String str = new String(buffer, 0, num);
                System.out.println(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fr != null) {
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

 5.FileReader与FileWriter实现文件的复制

案例:

package Writer;

import javax.imageio.IIOException;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileReaderAndFileWriterCopyTest {
    public static void main(String[] args) {
        copyFile();
    }
    private static void copyFile(){
        //FileReader.read
//        FileWriter.write
        FileReader fr=null;
        FileWriter fw=null;
        try {
            fr=new FileReader("writerData.txt");
            fw=new FileWriter("writerData1.txt",true);
            int num;
            char[] buffer=new char[8];
            //边读边写
            while ((num=fr.read(buffer))!=-1){
                //写入数据到新文件
                fw.write(buffer,0,num);
            }
            fw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fw!=null){
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fr!=null){
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

6.BufferedWriter类

BufferedWriter类里有一个方法要注意

 案例:

package Writer;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedWriterTest {
    public static void main(String[] args) {
//        创建BufferedWriter对象
        FileWriter fw = null;
        BufferedWriter bw = null;
        try {
            fw = new FileWriter("WriterData2.txt");
            bw = new BufferedWriter(fw);
            for (int i = 0; i < 4; i++) {
                bw.write("abc" + i);
                //行分隔符号
                bw.newLine();
            }
            bw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fw != null) {
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bw != null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

7.BufferedReader类

BufferedReader类里有一个方法要注意

案例:

package Reader;

import javax.imageio.IIOException;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderTest {
    public static void main(String[] args) {
        FileReader fr = null;
        BufferedReader br = null;
        try {
            fr = new FileReader("WriterData2.txt");
            br = new BufferedReader(fr);
            String str;
            while ((str = br.readLine()) != null) {
                System.out.println(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}

 8.BufferedWriter与BufferedReader实现文件的复制

案例:

package Writer;

import javax.imageio.IIOException;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileReaderAndFileWriterCopyTest {
    public static void main(String[] args) {
        copyFile();
    }
    private static void copyFile(){
        //FileReader.read
//        FileWriter.write
        FileReader fr=null;
        FileWriter fw=null;
        try {
            fr=new FileReader("writerData.txt");
            fw=new FileWriter("writerData1.txt",true);
            int num;
            char[] buffer=new char[8];
            //边读边写
            while ((num=fr.read(buffer))!=-1){
                //写入数据到新文件
                fw.write(buffer,0,num);
            }
            fw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fw!=null){
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fr!=null){
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值