JavaIO

JavaIO

FileWriter

构造方法:

FileWriter(String fileName) 需要传入一个文件路径

成员方法:

void write(String str) 向指定文件写入字符str

void write(String str,int index,int len); 写入一个字符串中的一部分数据

void write(int ch); 写入一个字符串数据,这里参数是int的好处是既可以写入一个char烈性的数据也可以写入char对应的int类型的值。如‘a’对应97

void write(char[] chs) 写入一个字符数组数据

void write(char[] chs,int index,int len) 写入一个字符数组的一部分数据

void flush() 清空缓冲区数据 使其全部写入到指定文件 因此一般在关闭流之前需要调用该方法

void close() 关闭流释放系统底层资源

FileWriter写入换行以及向文本末尾追加

写入换行:

\n可以实现换行,但是windows系统自带的记事本打开并没有换行,因为Windows识别换行不是\n,而是\r\n。

windows: \r\n

linux: \n

mac: \r

实现数据的追加写入:

FileWriter(String fileName,boolean append); FileWriter默认是覆盖原文的,若需要在原文的基础上在追加内容则可以使用FileWriter(fileName,true)方式创建输入流对象

FileReader

构造方法:

FileReader(String fileName)

成员方法:

int read() 读取单个字符

int read(char[] buf) 读取字符,并将字符读入数组buf中 返回的是读取字符的个数

代码实例:

public class FileReaderDemo {
    public static void main(String[] args) {
        try {
            FileReader fr = new FileReader("a.txt");
            int ch;
            while ((ch=fr.read())!=-1){    //一次读取一个字符
                System.out.print((char)ch);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("-------------");
        try {
            FileReader fr=new FileReader("a.txt");
            char[] chs=new char[10];
            int len=0;
            int i=0;
            while((len=fr.read(chs))!=-1){          //一次读取
                i++;
                System.out.println("第"+i+"次读取"+len+"个字符");
                System.out.print(new String(chs,0,len));
                System.out.println();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

hello world!

第1次读取10个字符
hello worl
第2次读取4个字符
d!

缓冲流

  • BufferedWriter: 将文本写入字符输出流,缓冲各个字符,从而提供单个字符,数组和字符串的高效写入。
  • BufferedReader: 从字符输入流读取文本,缓冲各个字符,从而实现字符,数组和行的高效读取。

缓冲流复制文本文件两种方式

  1. 使用缓冲流不使用字符数组
  2. 使用缓冲流使用字符数组

代码实例:

public class BufferedStreamDemo {
    public static void main(String[] args) {
        BufferedReader br=null;
        BufferedWriter bw=null;
        try {
            br = new BufferedReader(new FileReader("a.txt"));
            bw = new BufferedWriter(new FileWriter("copy.txt"));

            //不使用数组读写数据  一次读写一个字符
//            int ch;
//            while((ch=br.read())!=-1){
//                bw.write(ch);
//            }

            //使用字符数组读写数据  一次读写一个字符数组
            char[] chs=new char[1024];
            int len;
            while((len=br.read(chs))!=-1){
                bw.write(chs,0,len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(br!=null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(bw!=null){
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }
}

缓冲流的特有方法

void newLine(); 写一个换行符,这个换行符由系统决定,不同的操作系统newLine()方法使用的换行符不同,我们不在需要知道系统的换行符是什么。

String readLine(); 一次读取一行数据,但是不读取换行符

public class BufferedStreamDemo2 {
    public static void main(String[] args) {
        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));

            for(int i=0;i<3;i++){
                bw.write("Hello World!");
                //bw.write("\r\n");    使用newLine方法我们不需要知道某个系统的换行符是什么
                bw.newLine();
            }
            bw.flush();
            bw.close();

            BufferedReader br=new BufferedReader(new FileReader("a.txt"));
            String line;
            while((line= br.readLine())!=null){
                System.out.println(line);
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值