博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java学习笔记 --- IO(3)
阅读量:5827 次
发布时间:2019-06-18

本文共 11539 字,大约阅读时间需要 38 分钟。

1、FileReader:读取字符流,默认GBK

public class CharStreamDemo {    public static void main(String[] args) throws IOException {        //给文件中写中文        writeCNText();        //读取文件中的中文        readCNText();    }        //读取中文    public static void readCNText() throws IOException {        FileReader fr = new FileReader("D:\\test\\cn.txt");        int ch = 0;        while((ch = fr.read())!=-1){            //输出的字符对应的编码值            System.out.println(ch);            //输出字符本身            System.out.println((char)ch);        }    }    //写中文    public static void writeCNText() throws IOException {        FileOutputStream fos = new FileOutputStream("D:\\test\\cn.txt");        fos.write("欢迎你".getBytes());        fos.close();    }}

 2、FileWriter:写入字符流对象,默认的是GBK

public class FileWriterDemo {    public static void main(String[] args) throws IOException {        //演示FileWriter 用于操作文件的便捷类。        FileWriter fw = new FileWriter("d:\\text\\fw.txt");                fw.write("你好谢谢再见");//这些文字都要先编码。都写入到了流的缓冲区中。                fw.flush();//刷新缓冲区,刷新后,流还可以继续使用                fw.close();    }}

 3、flush()close()的区别?

   flush():刷新缓冲区,将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。

  close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。

4、OutputStreamWriter:

  构造方法:InputStreamReader(InputStream is):用默认的编码读取数据

       InputStreamReader(InputStream is,String charsetName):用指定的编码读取数据

/* * OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流 * OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流数据转换为字符流 * 把字节流转换为字符流。 * 字符流 = 字节流 +编码表。 */public class OutputStreamWriterDemo {    public static void main(String[] args) throws IOException {        // 创建对象        // OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(        // "osw.txt")); // 默认GBK        // OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(        // "osw.txt"), "GBK"); // 指定GBK        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(                "osw.txt"), "UTF-8"); // 指定UTF-8        // 写数据        osw.write("中国");        // 释放资源        osw.close();    }}

 

/* * OutputStreamWriter的方法: * public void write(int c):写一个字符 * public void write(char[] cbuf):写一个字符数组 * public void write(char[] cbuf,int off,int len):写一个字符数组的一部分 * public void write(String str):写一个字符串 * public void write(String str,int off,int len):写一个字符串的一部分 *  * close()和flush()的区别? * A:close()关闭流对象,但是先刷新一次缓冲区。关闭之后,流对象不可以继续再使用了。 * B:flush()仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。 */public class OutputStreamWriterDemo {    public static void main(String[] args) throws IOException {        // 创建对象        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(                "osw2.txt"));        // 写数据        // public void write(int c):写一个字符        // osw.write('a');        // osw.write(97);        // 为什么数据没有进去呢?        // 原因是:字符 = 2字节        // 文件中数据存储的基本单位是字节。        // void flush()        // public void write(char[] cbuf):写一个字符数组        // char[] chs = {'a','b','c','d','e'};        // osw.write(chs);        // public void write(char[] cbuf,int off,int len):写一个字符数组的一部分        // osw.write(chs,1,3);        // public void write(String str):写一个字符串        // osw.write("我爱林青霞");        // public void write(String str,int off,int len):写一个字符串的一部分        osw.write("我爱林青霞", 2, 3);        // 刷新缓冲区        osw.flush();        // osw.write("我爱林青霞", 2, 3);        // 释放资源        osw.close();        // java.io.IOException: Stream closed        // osw.write("我爱林青霞", 2, 3);    }}

 5、InputStreamReader:

    构造方法:InputStreamReader(InputStream is):用默认的编码读取数据

         InputStreamReader(InputStream is,String charsetName):用指定的编码读取数据

/* * InputStreamReader(InputStream is):用默认的编码读取数据 * InputStreamReader(InputStream is,String charsetName):用指定的编码读取数据 */public class InputStreamReaderDemo {    public static void main(String[] args) throws IOException {        // 创建对象        // InputStreamReader isr = new InputStreamReader(new FileInputStream(        // "osw.txt"));        // InputStreamReader isr = new InputStreamReader(new FileInputStream(        // "osw.txt"), "GBK");        InputStreamReader isr = new InputStreamReader(new FileInputStream(                "osw.txt"), "UTF-8");        // 读取数据        // 一次读取一个字符        int ch = 0;        while ((ch = isr.read()) != -1) {            System.out.print((char) ch);        }        // 释放资源        isr.close();    }}
/* * InputStreamReader的方法: * int read():一次读取一个字符 * int read(char[] chs):一次读取一个字符数组 */public class InputStreamReaderDemo {    public static void main(String[] args) throws IOException {        // 创建对象        InputStreamReader isr = new InputStreamReader(new FileInputStream(                "StringDemo.java"));        // 一次读取一个字符        // int ch = 0;        // while ((ch = isr.read()) != -1) {        // System.out.print((char) ch);        // }        // 一次读取一个字符数组        char[] chs = new char[1024];        int len = 0;        while ((len = isr.read(chs)) != -1) {            System.out.print(new String(chs, 0, len));        }        // 释放资源        isr.close();    }}

 6、用字符流复制文件

/* * 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 *  * 数据源: *         a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader * 目的地: *         b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter */public class CopyFileDemo {    public static void main(String[] args) throws IOException {        // 封装数据源        InputStreamReader isr = new InputStreamReader(new FileInputStream(                "a.txt"));        // 封装目的地        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(                "b.txt"));        // 读写数据        // 方式1        // int ch = 0;        // while ((ch = isr.read()) != -1) {        // osw.write(ch);        // }        // 方式2        char[] chs = new char[1024];        int len = 0;        while ((len = isr.read(chs)) != -1) {            osw.write(chs, 0, len);            // osw.flush();        }        // 释放资源        osw.close();        isr.close();    }}
/* * 由于我们常见的操作都是使用本地默认编码,所以,不用指定编码。 * 而转换流的名称有点长,所以,Java就提供了其子类供我们使用。 * OutputStreamWriter = FileOutputStream + 编码表(GBK) * FileWriter = FileOutputStream + 编码表(GBK) *  * InputStreamReader = FileInputStream + 编码表(GBK) * FileReader = FileInputStream + 编码表(GBK) *  /* * 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 *  * 数据源: *         a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader -- FileReader * 目的地: *         b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter -- FileWriter */public class CopyFileDemo2 {    public static void main(String[] args) throws IOException {        // 封装数据源        FileReader fr = new FileReader("a.txt");        // 封装目的地        FileWriter fw = new FileWriter("b.txt");        // 一次一个字符        // int ch = 0;        // while ((ch = fr.read()) != -1) {        // fw.write(ch);        // }        // 一次一个字符数组        char[] chs = new char[1024];        int len = 0;        while ((len = fr.read(chs)) != -1) {            fw.write(chs, 0, len);            fw.flush();        }        // 释放资源        fw.close();        fr.close();
/* * 需求:把c:\\a.txt内容复制到d:\\b.txt中 *  * 数据源: *         c:\\a.txt -- FileReader * 目的地: *         d:\\b.txt -- FileWriter */public class CopyFileDemo3 {    public static void main(String[] args) throws IOException {        // 封装数据源        FileReader fr = new FileReader("c:\\a.txt");        // 封装目的地        FileWriter fw = new FileWriter("d:\\b.txt");        // 读写数据        // int ch = 0;        int ch;        while ((ch = fr.read()) != -1) {            fw.write(ch);        }                //释放资源        fw.close();        fr.close();    }}

 7、字符缓冲流

    BufferedWriter:字符缓冲输出流

       BufferedReader:字符缓冲输入流

   

/* BufferedWriter:字符缓冲输出流 * 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。  * 可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。  */public class BufferedWriterDemo {    public static void main(String[] args) throws IOException {        // BufferedWriter(Writer out)        // BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(        // new FileOutputStream("bw.txt")));        BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));        bw.write("hello");        bw.write("world");        bw.write("java");        bw.flush();        bw.close();    }}
/* * BufferedReader * 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。  * 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。  *  * BufferedReader(Reader in) */public class BufferedReaderDemo {    public static void main(String[] args) throws IOException {        // 创建字符缓冲输入流对象        BufferedReader br = new BufferedReader(new FileReader("bw.txt"));        // 方式1        // int ch = 0;        // while ((ch = br.read()) != -1) {        // System.out.print((char) ch);        // }        // 方式2        char[] chs = new char[1024];        int len = 0;        while ((len = br.read(chs)) != -1) {            System.out.print(new String(chs, 0, len));        }        // 释放资源        br.close();    }}
/* * 字符缓冲流的特殊方法: * BufferedWriter: *         public void newLine():根据系统来决定换行符 * BufferedReader: *         public String readLine():一次读取一行数据 *         包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null */public class BufferedDemo {    public static void main(String[] args) throws IOException {        // write();        read();    }    private static void read() throws IOException {        // 创建字符缓冲输入流对象        BufferedReader br = new BufferedReader(new FileReader("bw2.txt"));        // public String readLine():一次读取一行数据        // String line = br.readLine();        // System.out.println(line);        // line = br.readLine();        // System.out.println(line);        // 最终版代码        String line = null;        while ((line = br.readLine()) != null) {            System.out.println(line);        }                //释放资源        br.close();    }    private static void write() throws IOException {        // 创建字符缓冲输出流对象        BufferedWriter bw = new BufferedWriter(new FileWriter("bw2.txt"));        for (int x = 0; x < 10; x++) {            bw.write("hello" + x);            // bw.write("\r\n");            bw.newLine();            bw.flush();        }        bw.close();    }}

 8、字符缓冲流复制

* * 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 *  * 数据源: *         a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader -- FileReader -- BufferedReader * 目的地: *         b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter -- FileWriter -- BufferedWriter */public class CopyFileDemo {    public static void main(String[] args) throws IOException {        // 封装数据源        BufferedReader br = new BufferedReader(new FileReader("a.txt"));        // 封装目的地        BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));        // 两种方式其中的一种一次读写一个字符数组        char[] chs = new char[1024];        int len = 0;        while ((len = br.read(chs)) != -1) {            bw.write(chs, 0, len);            bw.flush();        }        // 释放资源        bw.close();        br.close();    }}
/* * 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 *  * 数据源: *         a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader -- FileReader -- BufferedReader * 目的地: *         b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter -- FileWriter -- BufferedWriter */public class CopyFileDemo2 {    public static void main(String[] args) throws IOException {        // 封装数据源        BufferedReader br = new BufferedReader(new FileReader("a.txt"));        // 封装目的地        BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));        // 读写数据        String line = null;        while ((line = br.readLine()) != null) {            bw.write(line);            bw.newLine();            bw.flush();        }        // 释放资源        bw.close();        br.close();    }}

 

  

转载于:https://www.cnblogs.com/flei/p/6618828.html

你可能感兴趣的文章
Java I/O操作
查看>>
Tomcat性能调优
查看>>
Android自学--一篇文章基本掌握所有的常用View组件
查看>>
灰度图像和彩色图像
查看>>
FreeMarker-Built-ins for strings
查看>>
argparse - 命令行选项与参数解析(转)
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
spring-boot支持websocket
查看>>
我理想中的前端工作流
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
Android状态栏实现沉浸式模式
查看>>
使用Openfiler搭建ISCSI网络存储
查看>>
学生名单
查看>>
(转) 多模态机器翻译
查看>>
矩阵常用归一化
查看>>
Oracle常用函数总结
查看>>
【聚能聊有奖话题】Boring隧道掘进机完成首段挖掘,离未来交通还有多远?
查看>>
考研太苦逼没坚持下来!看苑老师视频有点上头
查看>>
HCNA——RIP的路由汇总
查看>>
zabbix监控php状态(四)
查看>>