字符流

1、概念:
使用字符作为载体传输数据的过程。
2、Writer类
(1)API介绍
在这里插入图片描述
(2)功能方法
在这里插入图片描述
3、FileWriter类
(1)API介绍
在这里插入图片描述
(2)构造方法
在这里插入图片描述

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

public class Demo4_FileWriter {

    public static void main(String[] args) throws IOException {
        //FileWriter(String)
        //FileWriter out = new FileWriter("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
        //System.out.println(out);//java.io.FileWriter@610455d6

        //FileWriter(String,boolean) 如果boolean为true,则不清空文件内容
        FileWriter out2 = new FileWriter("/Users/jim/Desktop/Work/temp/java1221/demo.txt",true);
        System.out.println(out2);//java.io.FileWriter@610455d6

        //FileWriter(File) 是否需要对路径进行File操作?如需要则使用该构造方法。

        //FileWriter(File,boolean)
    }
}

(3)功能方法(与Writer类的功能一致)

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Demo4_FileWriter {

    public static void main(String[] args) throws IOException {
        Writer out = new FileWriter("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
        //out.write('c');//一个一个字符写到缓冲区中
        //System.out.println("一个一个字符写到缓冲区中");

        //char[] c = {'a', 'b', 'c'};
        //out.write(c);
        //System.out.println("一堆一堆字符写到缓冲区中");
        //out.write(c,1,1);
        //System.out.println("某一堆字符写到缓冲区中");

        String s = "java1221";
        //out.write(s);
        //System.out.println("字符串写入缓冲区中");
        out.write(s,4,4);
        System.out.println("某一部分字符串写到缓冲区中");

        //缓冲区的类型是什么?   字节类型
        //默认缓冲区的大小?     8192
        //默认字符编码表是什么?  本电脑字符编码表


        out.flush();
        out.close();
   }
}

4、Reader类
(1)API介绍
在这里插入图片描述
(2)功能方法
在这里插入图片描述
5、FileReader类
(1)API介绍
在这里插入图片描述
(2)构造方法
在这里插入图片描述

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class Demo5_FileReader {

    public static void main(String[] args) throws FileNotFoundException {
        //构造方法
        //FileReader(String)
        FileReader in = new FileReader("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
        System.out.println(in);//java.io.FileReader@610455d6

        //FileReader(File)
        File file = new File("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
        FileReader in2 = new FileReader(file);
        System.out.println(in2);//java.io.FileReader@511d50c0
    }
}

(3)功能方法(与Reader类的功能方法一致)

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

public class Demo5_FileReader {

    public static void main(String[] args) throws IOException {
        FileReader in = new FileReader("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
        //int read = -1;//字符数据
        //read()
        /*while((read = in.read())!=-1) {//对字节缓冲区一个一个字符读。
            System.out.print((char) read);
        }*/

        char[] cs = new char[1024];
        int len = -1;
        //read(char[])
        while ((len = in.read(cs)) != -1) {//对字节缓冲区一堆一堆字符读到自定义字符数组中。
            System.out.println(new String(cs,0,len));
        }
        in.close();
        //method_构造方法();
    }
}

6、文件复制
在这里插入图片描述


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

public class Demo6_文件复制 {
    public static void main(String[] args) {
        //文件
        FileReader in = null;
        FileWriter out = null;
        try {
            //1
            in = new FileReader("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
            out = new FileWriter("/Users/jim/Desktop/Work/temp/demo.txt");

            char[] cs = new char[1024];
            int len = -1;
            //2
            while ((len = in.read(cs)) != -1) {
                //3
                out.write(cs,0,len);
                //4
                out.flush();
            }
            System.out.println("文件复制成功");

        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            if(in!=null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(out!=null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

注意:字符流无法复制非文本文件,由于读取和写入数据过程中都需要经过字符编码表,在读取字节数据时会硬性转换成字符,但得到字符是无法解析的字符。所以重新写入到硬盘中时,该无法解析的字符无法还原成原有的字节,从而导致文件损坏。>>>对复制非文本文件只能使用字节流

7、BufferedWriter类
(1)API介绍
在这里插入图片描述
(2)构造方法
在这里插入图片描述

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

public class Demo7_BufferedWriter {

    public static void main(String[] args) throws IOException {
        //构造方法
        //BufferedWriter(Writer)
        Writer w = new FileWriter("/Users/jim/Desktop/Work/temp/java1221/demo.txt",true);
        BufferedWriter out = new BufferedWriter(w);
        System.out.println(out);

        //BufferedWriter(Writer,int)
        BufferedWriter out2 = new BufferedWriter(w, 1024);
        System.out.println(out2);

        //问题:1、如何解决文件内容清空问题?FileWriter中加入true
        //     2、默认字符缓冲空间大小?8192
    }
}

(3)功能方法
在这里插入图片描述

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

public class Demo7_BufferedWriter {

    public static void main(String[] args) throws IOException {
        Writer w = new FileWriter("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
        BufferedWriter out = new BufferedWriter(w);

        out.write("春眠不觉晓,");
        //.nextLine 写入换行符
        out.newLine();
        out.write("处处蚊子咬。");

        out.flush();
        out.close();
        System.out.println("文件写入成功");
        //method_构造方法();
    }
}

9、BufferedReader类
(1)API介绍
在这里插入图片描述
(2)构造方法
在这里插入图片描述

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;

public class Demo8_BufferedReader {

    public static void main(String[] args) throws FileNotFoundException {
        Reader r = new FileReader("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
        //BufferedReader(Reader)
        BufferedReader in = new BufferedReader(r);
        System.out.println(in);

        //BufferedReader(Reader,int)
        BufferedReader in2 = new BufferedReader(r,1024);
        System.out.println(in2);
    }
}

(3)功能方法
在这里插入图片描述

import java.io.*;

public class Demo8_BufferedReader {

    public static void main(String[] args) throws IOException {
        Reader r = new FileReader("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
        BufferedReader in = new BufferedReader(r);
        //readLine() 读取一行字符串数据,包含行的内容的字符串,不包括任何行终止字符,如果已达到流的末尾,则为null
        String s = null;
        while ((s = in.readLine()) != null) {
            System.out.println(s);
        }
        in.close();
        //method_构造方法();
    }
}

10、文件复制

import java.io.*;

public class Demo9_文件复制 {

    public static void main(String[] args) {
        BufferedReader in = null;
        BufferedWriter out = null;
        try {
            in = new BufferedReader(new FileReader("/Users/jim/Desktop/Work/temp/java1221/demo.txt"));
            out = new BufferedWriter(new FileWriter("/Users/jim/Desktop/Work/temp/demo.txt"));
            String s = null;
            while ((s = in.readLine()) != null) {//读取一行
                out.write(s);//写入数据
                out.newLine();//换行
                out.flush();
            }
            System.out.println("文件复制成功");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(in!=null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(out!=null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值