Java字符流

字符流:

字符流适合做文本文件的操作(读,写)

 

FileReader:

FileReader:文件字符输入流。

作用:以内存为基准,可以把文件中的数据以字符的形式读入到内存中去。

 

方法:

构造器说明
public FileReader(File file)创建字符输入流管道与源文件接通
public FileReader (String pathname)创建字符输入流管道与源文件接通

 

方法名称说明
public int read()每次读取一个字符返回,如果发现没有数据可读会返回-1.
public int read(char[] buffer)每次用一个字符数组去读取数据,返回字符数组读取了多少个字符,如果发现没有数据可读会返回-1.

 

package com.itheima.demo00_1字符输入流;

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

/*
目标: 使用字符流读取字符数据
 */
public class Demo082 {
    public static void main(String[] args) throws IOException {
        //目标:读取 day10-io\abc\4.txt 文件内容,打印到控制台上
        FileReader fr=new FileReader("day10\\abc\\4.txt");
        //1.每次读取一个字符
        int len=-1;
        while((len= fr.read())!=-1){
            System.out.println((char)len);
        }

        System.out.println("--------------");

        //2.每次读取多个字符
        //输入流没保存,第二次使用输入流无效

        char[] chars = new char[2];
        while((len=fr.read(chars))!=-1){
            System.out.println(new String(chars,0,len));
        }


        fr.close();

    }
}

 
 
 

FileWriter:

FileWriter:文件字符输出流。

作用:以内存为基准,把内存中的数据以字符的形式写出到文件中去。

 
 

方法:

构造器说明
public FileWriter(File file)创建字节输出流管道与源文件对象接通
public FileWriter(String filepath)创建字节输出流管道与源文件路径接通
public FileWriter(File file,boolean append)创建字节输出流管道与源文件对象接通,可追加数据
public FileWriter(String filepath,boolean append)创建字节输出流管道与源文件路径接通,可追加数据

 

方法名称说明
void write(int c)写一个字符
void write(String str)写一个字符串
void write(String str, int off, int len)写一个字符串的一部分
void write(char[] cbuf)写入一个字符数组
void write(char[] cbuf, int off, int len)写入字符数组的一部分

 

package com.itheima.demo00_2字符输出流;

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

/*
目标: 使用字符输出流写字符数据到文件

关于换行
    Linux换行: \n
    MacOS换行: \r
    Windows换行: \r\n 为了兼容其他系统 \n, \r
 */
public class Demo091 {
    public static void main(String[] args) throws IOException {
        // 1.创建文件字符输出流
        // FileWriter fw=new FileWriter("day10\\abc\\5.txt");
        //末尾追加
        FileWriter fw=new FileWriter("day10\\abc\\5.txt",true);

        // 2.调用write方法写字符数据到文件
        // public void write(char c): 写一个字符到流中
        fw.write(97);
        fw.write('你');

        char[] chs = new char[] {'我', '想', '要', '个', '同', '桌'};
        // public void write(char[] cbuf): 写一个字符数组到流中
        fw.write("\r\n");
        fw.write(chs);

        // public void write(char[] cbuf, int off, int len) : 写字符数组的一部分到流中
        // char cbuf[]: 字符数组
        // int off: 从哪个索引开始写
        // int len: 数量
        fw.write("\r\n");
        fw.write(chs,1,2);




        String str = "寒冷的天气使人年轻,冻的像个孙子似的";
        // public void write(String str): 写字符串到流中
        fw.write("\r\n");
        fw.write(str);



        // public void write(String str, int off, int len)
        // String str: 字符串
        // int off: 从哪个索引开始写
        // int len: 数量
        fw.write("\r\n");
        fw.write(str,7,2);

        // 3.关闭流
        fw.close();
    }
}

 
 

注意:

字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效。

方法名称说明
public void flush() throws IOException刷新流,就是将内存中缓存的数据立即写到文件中去生效!
public void close() throws IOException关闭流的操作,包含了刷新!

​ flush: 刷新缓冲区, 刷新后还能再写
​ close: 关闭流, 关闭后不能再写 (一定要close)

package com.itheima.demo00_2字符输出流;

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

/*
    flush: 刷新缓冲区, 刷新后还能再写
    close: 关闭流, 关闭后不能再写 (一定要close)
 */
public class Demo092 {
    public static void main(String[] args) throws IOException {
        // 字节流: 写数据时,字节数据会直接写到文件中, 文件中本质就是字节数据
        // FileOutputStream fos = new FileOutputStream("day10-io\\abc\\6.txt");
        // fos.write(97);
        // 字节流写的是字节数据, 文件底层也是保存字节数据, 字节流不close, 写的数据会直接到文件

        // 字符流: 写数据时,字符数据不会直接写到文件中
        FileWriter fw = new FileWriter("day10-io\\abc\\7.txt");
        fw.write("你好呀,记住我了吗?11");
        // 字符流写的是字符数据, 文件底层是保存字节数据, 字符流不close, 写的字符数据不会直接到文件
        // fw.flush(); // 刷新 字符流的缓冲区, 让文字保存到文件中(类似文件的保存), flush后还可以再写
        fw.close(); // 关闭流, 在关闭之前会自动flush刷新一下,(类似文件的退出) close不能再写
        // fw.write("呵呵");
    }
}

 
 

 

案例:

案例:
使用键盘输入一个字符串
使用键盘输入源文件名
使用键盘输入目的地文件名
把键盘输入的字符串保存到源文件中
再把源文件的内容复制到目的地文件中

package com.itheima.demo00_2字符输出流;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;


public class Test {
    public static void main(String[] args) throws IOException {
        //创建控制台输入输出对象
        Scanner sc = new Scanner(System.in);

        // 使用键盘输入一个字符串
        String content = sc.next();

        // 使用键盘输入源文件名
        String sourceFile = sc.next();


        // 使用键盘输入目的地文件名
        String targetFile = sc.next();


        // 把键盘输入的字符串保存到源文件中 (使用文件字符输出流)
        FileWriter fw=new FileWriter(sourceFile);
        fw.write(content);
        fw.close();




        // 字符流只能复制文本文件,不能复制视频,音频图片
        // 再把源文件的内容复制到目的地文件中 (因为是纯文本使用字符流复制也可以, 推荐看到复制就使用字节流, 文件复制)
        FileOutputStream fos=new FileOutputStream(targetFile);
        FileInputStream fis=new FileInputStream(sourceFile);



        // 循环读写
        int len=-1;
        while((len=fis.read())!=-1){
            fos.write(len);
        }



        //关闭资源
        fis.close();
        fos.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值