Java日志第38天 2020.8.12

字符输入流

java.io.Reader

是字符输入流的最顶层父类,定义了一些共性的成员方法,是一个抽象类

共性的成员方法:

- int read():读取单个字符并返回

- int read(char[] cbuf):一次读取多个字符,将字符读入数组

- void close():关闭该流并释放与之关联的所有资源

FileReader

文件字符输入流

java.io.FileReader extends InputStreamReader extends Reader

作用:把硬盘文件中的数据以字符的方式读取到内存中

构造方法

FileReader(String name)

FileReader(File file)

import java.io.FileReader;
import java.io.IOException;

public class Demo01Reader {

    public static void main(String[] args) throws IOException {
        FileReader fr1 = new FileReader("E:\Java\Practice\src\Practice\demo15\a.txt");

        int len;
        while((len = fr1.read()) != -1) {
            System.out.print((char) len);
        }
        System.out.println();
        fr1.close();
        System.out.println("=================");

        FileReader fr2 = new FileReader("E:\Java\Practice\src\Practice\demo15\a.txt");
        char[] cs = new char[1024];
        while((len = fr2.read(cs)) != -1) {
            System.out.println(new String(cs, 0, len));
        }
        fr2.close();
    }
}

字符输出流

是所有字符输出流的最顶层的父类,是一个抽象类

共性的成员方法:

- void write(int c):写入当个字符

- void write(char[] cbuf):写入字符数组

- abstract void wirte(char[] cbuf, int off, int len):写入字符数组的某一部分

off 数组的开始索引

len字符个数

- void write(String str):写入字符串

- void write(String str, int off, int len):写入字符串的某一部分

off 字符串的开始索引

len 字符个数

- void flush():刷新该流的缓冲

- void close():关闭此流,但先进行刷新

FileWrite

文件字符输出流

java.io.FileWrite extends OutputStreamWrite extends Writer

作用:把内存中字符数据写入到文件中

构造方法

FileWrite(File file)

FileWrite(String name)

void write(int c) 一个字符

public class Demo01Write {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("E:\Java\Practice\src\Practice\demo15\a.txt");

        fw.write(97);
        fw.flush();
        fw.close();
    }
}

读取数组或字符串

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

public class Demo01Write {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("E:\Java\Practice\src\Practice\demo15\a.txt");

        char[] cs = {'a', 'b', 'c', 'd', 'e'};
        fw.write(cs);

        fw.write(cs,1,3);

        fw.write("Hello World!");

        fw.write("Hello World",6,5);//World

        fw.flush();
        fw.close();
    }
}

使用try...catch...finally处理异常

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

public class TryCatchFinally {
    public static void main(String[] args) {
        FileWriter fw = null;
        try {
            fw=new FileWriter("W:\Java\Practice\src\Practice\demo15\a.txt");
            for (int i = 0; i < 10; i++) {
                fw.write("Hello World"+(i+1)+"
");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fw != null){
                try {
                    fw.close();
                } catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

注意到计算机中没有W盘,所以程序会报错,结果如下:

JDK7中的新特性

在try的后面可以添加一个(),在括号中可以定义流对象

这个流对象的作用域是在try中

try中的代码执行完毕会自动把流对象释放,不用写finally

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

public class TryCatchFinally {
    public static void main(String[] args) {
        try(FileWriter fr = new FileWriter("E:\Java\Practice\src\Practice\demo15\a.txt")){
            fr.write("Hello World");
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

明日任务:继续学习有关流的内容

原文地址:https://www.cnblogs.com/Gazikel/p/13489086.html