JAVA基础 day19 IO流概述 字符流:FileWriter类和FileReader类的使用 BufferedWriter和BufferedReader类的使用

IO流:用来处理设备之间的数据传输
流按操作数据分为两种:字节流和字符流
按流向分为:输入流和输出流

字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Reader,Writer

FileWriter类:
创建该类对象时,该对象一被初始化就必须明确要被操作的文件,如果文件不存在,则会在指定目录下创建该文件,如果指定目录下有该文件,那么就会覆盖掉原来的文件。

import java.io.*;
class FileWriterDemo
{
    public static void main(String[]args)
    {
        try
        {
        FileWriter fw=new FileWriter("File.txt");
        fw.write('i');
        fw.write(" love china");//写入是写到流里,即内存的缓冲区
        fw.flush();//这里刷新才能将缓冲区的数据传入到指定文件
        fw.close();//操作文件后要关闭流
        }
        catch(IOException e)
        {
            System.out.println("file error");
        }
    }
}

IO异常的处理方法

import java.io.*;
class FileWriterDemo
{
    public static void main(String[]args)
    {
        FileWriter fw=null;//因为fw是全局的,所以必须创建在外,所有的代码块才都能用到。
        try
        {
        fw=new FileWriter("File.txt");
        fw.write(" love china");
        fw.flush();
        }
        catch(IOException e)
        {
            System.out.println("file error");
        }
        finally
        {
            try{
                if(fw!=null)//当文件创建出异常时,fw指向null,没有可关闭的文件,所以会抛出空指针异常,为了增加代码健壮性,最好添加判断
                fw.close();
            }
            catch(IOException e)
        {
            System.out.println("file error");
        }
        }
    }
}

如果想在已有文件后面添加数据,只需要创建文件时用另一个构造方法
FileWriter(String fileName, boolean append);
当为true时,即确定在当前文件后面添加数据。

FileReader类:里面有读取文件的一些方法。

import java.io.*;
class FileReaderDemo
{
    public static void main(String []args)throws IOException
    {
        FileReader fr=new FileReader("File.txt");
        int ch=' ';
        while((ch=fr.read())!=-1)
        {
            System.out.println((char)ch);
        }
    }
}

实现将一个文件复制的方法

import java.io.*;
class CopyDemo
{
    public static void main(String []args)throws IOException
    {
        FileReader fr=new FileReader("D:\\Copy.txt");
        FileWriter fw=new FileWriter("E:\\Copy.txt");
        char []buf=new char [1024];
        int num=0;
        while ((num=fr.read(buf))!=-1)
        {
            fw.write(buf);

        }
        fr.close();
        fw.close();
    }
}

缓冲区:为了提高数据的传输效率
BufferedWriter类:缓冲区写入

import java.io.*;
class BufferWriterDemo
{
    public static void main(String[]args)throws IOException
    {
        FileWriter fw=new FileWriter("buff.txt");
        BufferedWriter bfw=new BufferedWriter(fw);
        for(int i=0;i<5;i++)
        {
            bfw.write("第"+i+"次");
            bfw.newLine();
            bfw.flush();
        }
        bfw.close();//只需关闭缓冲区即可,不用再关闭流对象

    }
}

BufferedReader类:缓冲区读取

import java.io.*;
class BufferedReaderDemo
{
    public static void main(String[]args)throws IOException
    {
        FileReader fr=new FileReader("buff.txt");
        BufferedReader bfw=new BufferedReader(fr);
        String s1=" ";
        while ((s1=bfw.readLine())!=null)//readLine()读取一行的文本
        {
            System.out.println(s1);
        }
        bfw.close();
    }

缓冲区实现复制的方法

import java.io.*;
class BufferedCopyDemo
{
    public static void main(String[]args)throws IOException
    {
        FileReader fr=new FileReader("buff.txt");
        BufferedReader bfr=new BufferedReader(fr);
        FileWriter fw=new FileWriter("buff_copy.txt");
        BufferedWriter bfw=new BufferedWriter(fw);
        String s=" ";
        while((s=bfr.readLine())!=null)
        {
            bfw.write(s);
            bfw.newLine();
        }
        bfr.close();
        bfw.close();

    }
}

你可能感兴趣的:(java基础)