I/O流(字符流)

时间:2023-02-17 17:56:27

构造方法: 
FileWriter(File file) 
FileWriter(String fileName) 
FileReader(File file) 
FileReader(String fileName)

写数据方法: 
* 一次写一个字符 write(int c) 
* 一次写一个字符数组write(char[] cbuf) 
* 一次写一个字符数组的一部分write(char[] cbuf, int off,int len) 
* 一次写一个字符串write(String str) 
* 一次写一个字符串的一部分write(String str,int off,int len)

字符输入流 
* 字符输入流操作步骤: 
A:创建字符输入流对象 
FileReader fr = new FileReader(“a.txt”);

B:读取数据并显示在控制台
    a:一次读取一个字符
           一次读取一个字符
     int ch;
     while ((ch = fr.read()) != -1) {
     System.out.print((char) ch);
     }

 *      b:一次读取一个字符数组
    char[] chs = new char[1024];
    int len;
    while ((len = fr.read(chs)) != -1) {
        System.out.print(new String(chs, 0, len));
    }

 * C:释放资源
    fr.close();

演示:

public class CopyFile {
    public static void main(String[] args) throws IOException {
        /** * 1.封装数据源和目的地 * 2.一次读写一个字符或者一次读写一个字符数组 * 3.关流 */
        //封装数据源和目的地
        FileReader fr = new FileReader("InputStreamReaderDemo.java");
        FileWriter fw = new FileWriter("d.java");


        //一次读写一个字符数组
        char[] chs = new char[1024];
        int len;
        while ((len=fr.read(chs))!=-1) {
            fw.write(chs, 0, len);
            fw.flush();
        }


        //关流
        fw.close();
        fr.close();

    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

注意:字符流输入输出流复制的文件是有要求的,简单来说只要是记事本打开文件的内容你能够看得懂, 
就可以用字符流来进行复制,否则不行

具体原因:像复制MP3或者一些视频文件的时候,如果他的字节个数不是偶数的话,就会造成文件的缺损,
因为一个字符等于两个字节

高效流:

 * BufferedReader:字符缓冲输入流
 构造:BufferedReader(Reader in) 
 特殊方法:public String readLine():包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null 

 * BufferedWriter:字符缓冲输出流
 构造:BufferedWriter(Writer out) 
 特殊方法:public void newLine():会根据系统来确定写入不同的换行符